Newer
Older
ServerTester / src / main / java / info / istlab / ServerTester / ThreadEchoServer.java
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());
		}
	}
}