package info.istlab.ServerTester; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.Socket; public class ThreadEchoServer extends Server { public ThreadEchoServer() { this(10008); } public ThreadEchoServer(int port) { this(port, "127.0.0.1"); } public ThreadEchoServer(int port, String bindaddress) { super(port, bindaddress); start(); } public void handleRequest() { if (!serverSocket.isBound()) { try { serverSocket.close(); } catch (IOException e) { } return; } while (serverSocket.isBound()) { try { Socket socket = serverSocket.accept(); System.out.println("---\nConnection Requst from: " + (socket.getInetAddress())); new RequestHandler4TES(socket); } catch (IOException e) { thread = null; } } } public static void main(String[] args) { invokeMain(args, "ThreadEchoServer"); } } class RequestHandler4TES implements Runnable { Socket sock; Thread thread; RequestHandler4TES(Socket s) { sock = s; thread = new Thread(this); thread.start(); } public void run() { PrintStream os; BufferedReader br; String line; System.out.println("accept"); try { br = new BufferedReader(new InputStreamReader(sock.getInputStream())); os = new PrintStream(sock.getOutputStream()); // クライアントからのメッセージを待ち、受け取ったメッセージをそのまま返す while ((line = br.readLine()) != null) { System.out.println("(Server received) " + line); os.println(line); } } catch (IOException e) { // os.close(); System.out.println(e); } finally { System.out.println("disconnected " + sock.toString()); } } }