Eine sehr leichte und benutzerfreundliche Bibliothek für Client-Server-Client- oder einfach Server-Client-Anwendungen in Java, die alle Arbeiten für Sie erledigt: Verbindungsaufbau, Wiederverbindung, Zeitüberschreitung, Keep-Alive usw. im Hintergrund. Sagen Sie einfach der Bewerbung, was sie senden und empfangen soll, und der Rest wird von selbst erfolgen. Das ist fast Magie!
Codequalität und Erstellung Status
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!" )
}
});
}
}Machen Sie einfach Ihre eigene Klasse, z. B. MyServer -Erweiterungsserver, verwenden Sie einfach den ursprünglichen Konstruktor und implementieren Sie die Prestart () -Methode. In der Prestart -Methode fügen Sie einfach hinzu
registerMethod ( "IDENTIFIER" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
doSomethingWith ( msg , socket );
sendReply ( socket , "Some Reply" );
}
});Für jede Kennung eines DataPackge, auf den der empfangene Server empfangen wird, möchten Sie darauf reagieren.
Beispiel: Wenn Sie also "Ping" und eine ausführbare reagierende "Pong" an den Kunden registrieren, registrieren Sie sich einfach
registerMethod ( "PING" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
sendReply ( socket , "Pong" );
}
});Und das war's.
Damit weitere Kennungen reagieren können, legen Sie diese Linien einfach mehrmals in Ihren Prestart () ein. Vergessen Sie nicht, eine Antwort an die Kunden zu senden, von denen Sie den Datapackge erhalten haben, da sie warten, bis die Welt auf eine Antwort von Ihnen endet.
Beispiel für einen Server, der eine Chat-Message an alle verbundenen Clients überträgt:
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!
}
}Machen Sie einfach Ihre eigene Klasse, z. B. Myclient Extending Client, einfach den ursprünglichen Konstruktor. Wenn Sie bereit sind, dass sich der Client anmeldet, rufen Sie Start () an. Der Client wird je nach Konstruktor-Parametern eine Verbindung zum Server herstellen und sich auf dem Server registriert. Von nun an können Sie Nachrichten vom Server empfangen und in Verbindung bleiben (und falls erforderlich), bis Sie Stop () anrufen.
Um auf eine eingehende Nachricht zu reagieren, fügen Sie einfach hinzu
registerMethod ( "IDENTIFIER" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
doSomethingWith ( msg , socket );
}
});Irgendwo schlage ich den Konstruktor selbst für jede Nachrichten -ID vor, die Sie verarbeiten möchten.
Exmaple für eine eingehende Chat -Nachricht vom Server:
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.
}
});Anders vom Client erwartet der Server standardmäßig keine Antwort. Senden Sie ihm also nicht immer ein Antwortpaket, da er dafür einen für das Identifikator registrierten M-Methoden benötigt.
Als Server:
Als Kunde:
Es gibt einige Event -Handler (z. B. OnconnectionGood (), OnconnectionProblem (), OnclientRegistred (...) usw.) Sie können überschreiben, um diese Ereignisse zu bewältigen.
Die Client- und Server -Klassen bieten sowohl die Onlog- als auch die Onlogerror -Ereignishandler an, die in der Implementierung überschrieben werden können, wenn die Info- und Fehlermeldungen nicht (nur) in der Konsole ausgegeben werden sollten.