一個非常輕巧且易於使用的庫,適用於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事件處理程序,如果信息消息和錯誤消息不應在控制台中輸出(僅),則可以在實現中覆蓋。