一个非常轻巧且易于使用的库,适用于Java中的client-server-client或简单的服务器 - 客户端应用程序,为您完成所有工作:连接设置,重新连接,超时,持久,靠近等。只需告诉应用程序要发送和接收的内容,其余的就会自行发生。那几乎是神奇的!
代码质量和构建状态
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" );
}
});对于服务器收到的数据包的每个标识符,您想对此做出反应。
示例:因此,如果您注册“ ping”和可执行的响应“ pong”,只需注册
registerMethod ( "PING" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
sendReply ( socket , "Pong" );
}
});就是这样。
要使更多的标识符对此进行反应,只需将这些行多次放入您的prestart()即可。不要忘记向您从中获得的客户发送回复,因为他们将等到世界结束以寻求您的回应。
为所有连接客户端广播聊天消息的服务器的示例:
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 );
}
});在某个地方,我建议构造函数本身,对于您要处理的每个消息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事件处理程序,如果信息消息和错误消息不应在控制台中输出(仅),则可以在实现中覆盖。