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: }