01: //***** 02: import java.net.Socket; 03: import java.net.ServerSocket; 04: import java.io.IOException; 05: import java.io.BufferedReader; 06: import java.io.InputStreamReader; 07: import java.io.PrintWriter; 08: public class ReverseServerMT { 09: public static void main(String[ ] args) { 10: try { 11: ServerSocket ssock = new ServerSocket(port, max_conn); 12: // Start new thread per client connection. 13: while (true) { 14: Socket sock = ssock.accept(); 15: new ClientHandler(sock).start(); 16: } 17: } 18: catch(IOException e) { System.err.println(e); } 19: } 20: private static final int port = 9876; 21: private static final int max_conn = 100; 22: } 23: class ClientHandler extends Thread { 24: ClientHandler(Socket sock) { this.sock = sock; } 25: public void run() { 26: try { 27: // Read the request and produce response. 28: InputStreamReader isr = new InputStreamReader(sock.getInputStream()); 29: BufferedReader in = new BufferedReader(isr); 30: String req = in.readLine(); // blocks 31: String res = new StringBuffer(req).reverse().toString(); 32: // Write the response to the client. 33: PrintWriter out = new PrintWriter(sock.getOutputStream()); 34: out.println(res); 35: out.flush(); 36: sock.close(); 37: } 38: catch(IOException e) { System.err.println(e); } 39: } //*** a Thread stops when exiting run() 40: private Socket sock; 41: }