import java.io.*; import java.net.*; class ClientHandler extends Thread { protected Socket incoming; public ClientHandler(Socket incoming) { this.incoming = incoming; } public void run() { try { BufferedReader in = new BufferedReader(new InputStreamReader(incoming.getInputStream())); PrintWriter out = new PrintWriter(new OutputStreamWriter(incoming.getOutputStream())); out.println("Hello! This is Java MultiEchoServer."); out.println("Enter BYE to exit."); out.flush(); for (;;) { String str = in.readLine(); if (str == null) { break; } else { out.println("Echo: " + str); out.flush(); System.out.println("Received: " + str); if (str.trim().equals("BYE")) break; } } incoming.close(); } catch (Exception e) { System.out.println("Error: " + e); } } } public class MultiEchoServer { public static void main(String[] args) { System.out.println("MultiEchoServer started."); try { ServerSocket s = new ServerSocket(8009); for (;;) { Socket incoming = s.accept(); new ClientHandler(incoming).start(); } } catch (Exception e) { System.out.println("Error: " + e); } System.out.println("MultiEchoServer stopped."); } }