클라이언트-서버 클라이언트 또는 Java의 간단한 서버 클라이언트 애플리케이션을위한 매우 가볍고 사용하기 쉬운 라이브러리로 연결 설정, 재 연결, 타임 아웃, 유지-경화 등. 신청서에 보내고받을 내용을 알리면 나머지는 그 자체로 일어날 것입니다. 거의 마법입니다!
코드 품질 및 빌드 상태
import java . net . Socket ;
public class MyServer extends Server {
public MyServer ( int port ) {
super ( port );
}
@ Override
public void preStart () {
registerMethod ( "SOME_MESSAGE" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
doSomethingWith ( msg );
sendReply ( socket , "Hey, thanks for your message. Greetings!" )
}
});
}
}예를 들어 MyServer 확장 서버 (예 : 원래 생성자를 사용하고 prestart) 메소드를 구현하기 만하면됩니다. Prestart 메소드에서 추가하십시오
registerMethod ( "IDENTIFIER" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
doSomethingWith ( msg , socket );
sendReply ( socket , "Some Reply" );
}
});서버가받은 Datapackge의 모든 식별자에 대해 반응하고자합니다.
예 : 따라서 "Ping"및 클라이언트에 "Pong"에 응답하는 실행 파일을 등록하는 경우 등록하십시오.
registerMethod ( "PING" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
sendReply ( socket , "Pong" );
}
});그리고 그게 다야.
더 많은 식별자가 반응하려면 해당 라인을 Prestart ()에 여러 번 넣으십시오. Datapackge를받은 고객에게 답장을 보내는 것을 잊지 마십시오. 세상이 귀하의 응답을 위해 세상이 끝날 때까지 기다릴 것입니다.
모든 연결된 클라이언트에게 채팅 메시지를 방송하는 서버의 예 :
registerMethod ( "Message" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
System . out . println ( "[Message] New chat message arrived, delivering to all the clients..." );
broadcastMessage ( msg ); //The broadcast to all the receivers
sendReply ( socket , String . valueOf ( reveicerCount )); //The reply (NECESSARY! unless you want the client to block while waiting for this package)
}
}); import java . net . Socket ;
public class MyClient extends Client {
public MyClient ( String id , String address , int port ) {
super ( id , address , port );
registerMethod ( "SOME_MESSAGE" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
System . out . println ( "Look! I got a new message from the server: " + msg . get ( 1 ));
}
});
start (); // Do not forget to start the client!
}
}MyClient 확장 클라이언트와 예를 들어 자신의 수업을 만드십시오. 원래 생성자를 사용하십시오. 클라이언트가 로그인 할 준비가 될 때마다 시작 ()을 호출하십시오. 클라이언트는 생성자-파라미터에 따라 서버에 연결하고 서버에 자체적으로 등록합니다. 이제부터 서버로부터 메시지를 받고 정지 ()을 호출 할 때까지 연결을 유지하고 필요한 경우 다시 연결할 수 있습니다.
들어오는 메시지에 반응하려면 추가하십시오
registerMethod ( "IDENTIFIER" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
doSomethingWith ( msg , socket );
}
});어딘가에, 나는 당신이 처리하려는 모든 메시지 ID에 대해 생성자 자체를 제안합니다.
서버에서 들어오는 채팅 메시지에 대한 exmaple :
registerMethod ( "PING" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
System . out . println ( "Look! I got a new message from the server: " + msg . get ( 1 ));
// msg.get(1); should now return "Pong" in our example.
}
});클라이언트와는 다른 서버는 기본적으로 답장을 기대하지 않습니다. 따라서 그에 등록 된 여분의 메모드가 필요하기 때문에 항상 그에게 회신 포장을 보내지 마십시오.
서버 :
클라이언트 :
일부 이벤트 핸들러 (예 : OnConnectionGood (), OnConnectionProblem (), OnClientRegistered (...) 등을 처리하여 이러한 이벤트를 처리 할 수 있습니다.
클라이언트 및 서버 클래스는 Onlog 및 OnlogerRor 이벤트 핸들러를 제공하며 정보 메시지 및 오류 메시지가 콘솔에서 출력되지 않아야하는 경우 구현에서 무시할 수 있습니다.