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();
        }
    }
}