Beispiel für einen einfachen Server
Ein einfacher Server der auf Port 8081 auf Verbindungen wartet. Wenn ein Client sich verbindet, wird eine Nachricht vom Client empfangen und eine Antwort zurückgeschickt. Der Server läuft in einem eigenen Thread, damit die GUI nicht blockiert wird. Die Bearbeitung der Clients läuft auch in eigenen Threads, damit mehrere Clients gleichzeitig bedient werden können.
public class Server {
public void startServer() throws Exception{
// Starte Server im eigenen Thread damit
// die GUI nicht blockiert wird
Thread t = new Thread(()->serverLoop());
t.start();
}
private void serverLoop() {
ServerSocket serverSocket;
try {
serverSocket = new ServerSocket(8081);
} catch (IOException e) {
e.printStackTrace();
return;
}
System.out.println("Warte auf Client");
while(true) {
// Wichtig: Das try/catch muss innerhalb der Schleife sein
// damit der Server nach einem Fehler nicht beendet wird
try {
Socket socket = serverSocket.accept();
// Starte einen neuen Thread für jeden Client
// damit mehrere Clients gleichzeitig bedient werden können
Thread t = new Thread(()->handleClient(socket));
t.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void handleClient(Socket socket) {
try {
// Setze Timeout auf 1 Sekunde
// ohne Timeout würde der Server bei einem Fehler im Client
// ewig auf eine Antwort warten
socket.setTimeout(1000);
System.out.println("Client verbunden");
String s = socket.readLine(100);
System.out.println(s);
socket.writeln("Hallo Client!");
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}