// Purpose. ServerSocket demo (multi-threaded) [source: Horstmann98, p145] import java.io.*; import java.net.*; class ThreadedEchoHandler extends Thread { private Socket socket; private int id; public ThreadedEchoHandler( Socket in, int num ) { socket = in; id = num; } public void run() { try { BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream() ) ); PrintWriter out = new PrintWriter( socket.getOutputStream(), true ); // auto-flush while (true) { out.println( " (" + id + ") enter text or 'x' to exit -" ); String str = in.readLine(); if (str == null) break; if (str.equals( "x" )) break; System.out.println( " ---" + id + "---" + str + "---" ); out.println( " ---" + str + "---" ); } socket.close(); } catch( IOException e ) { e.printStackTrace(); } System.out.println( "closing handler " + id ); } } public class ServerSocketThreaded { public static void main( String[] args ) { int count = 1; try { ServerSocket server = new ServerSocket( 8189 ); while (true) { Socket socket = server.accept(); System.out.println( "spawning handler " + count ); new ThreadedEchoHandler( socket, count++ ).start(); } } catch( Exception e ) { e.printStackTrace(); } } } // C:> java ServerSocketThreaded // spawning handler 1 // spawning handler 2 // spawning handler 3 // ---1---123 234 345--- // ---2---222 333 444--- // ---3---321 432 543--- // closing handler 3 // closing handler 2 // closing handler 1 // C:> telnet // (3) enter text or 'x' to exit - // 321 432 543 // ---321 432 543--- // (3) enter text or 'x' to exit - // x