//***** import java.net.Socket; import java.net.ServerSocket; import java.io.IOException; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; public class ReverseServerMT { public static void main(String[ ] args) { try { ServerSocket ssock = new ServerSocket(port, max_conn); // Start new thread per client connection. while (true) { Socket sock = ssock.accept(); new ClientHandler(sock).start(); } } catch(IOException e) { System.err.println(e); } } private static final int port = 9876; private static final int max_conn = 100; } class ClientHandler extends Thread { ClientHandler(Socket sock) { this.sock = sock; } public void run() { try { // Read the request and produce response. InputStreamReader isr = new InputStreamReader(sock.getInputStream()); BufferedReader in = new BufferedReader(isr); String req = in.readLine(); // blocks String res = new StringBuffer(req).reverse().toString(); // Write the response to the client. PrintWriter out = new PrintWriter(sock.getOutputStream()); out.println(res); out.flush(); sock.close(); } catch(IOException e) { System.err.println(e); } } //*** a Thread stops when exiting run() private Socket sock; }