Очень легкая и простая в использовании библиотеку для клиента-сервер-клиент или просто сервер-клиент в 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 Exting Server, просто используйте исходный конструктор и реализуйте метод Prestart (). В методе Prestart просто добавьте
registerMethod ( "IDENTIFIER" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
doSomethingWith ( msg , socket );
sendReply ( socket , "Some Reply" );
}
});Для каждого идентификатора данных дата, полученного сервера, вы хотите отреагировать.
Пример: Итак, если вы зарегистрируете «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, расширяющий клиент, просто используйте исходный конструктор. Всякий раз, когда вы готовы к клиенту входа в систему, вызовите start (). Клиент подключается к серверу в зависимости от конструкторов-параметров и зарегистрироваться на сервере. Отныне он может получать сообщения с сервера и оставаться на связи (и при необходимости подключается), пока вы не вызовут stop ().
Чтобы отреагировать на входящее сообщение, просто добавьте
registerMethod ( "IDENTIFIER" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
doSomethingWith ( msg , socket );
}
});Где -то я предлагаю сам конструктор, для каждого идентификатора сообщения, с которым вы хотите справиться.
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 (), OnConnectionProlem (), OnClient Regainted (...) и т. Д.) Вы можете перезаписать, чтобы справиться с этими событиями.
Классы клиента и сервера предоставляют обработчики событий OnLog и OnLoGerror, которые могут быть переопределены в реализации, если информационные сообщения и сообщения об ошибках не должны (только) выходить в консоли.