package j2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ThreadEchoServer implements Runnable {
Socket sock;
Thread thread;
ThreadEchoServer(Socket sc){
sock = sc;
//start running
thread = new Thread(this);
thread.start(); // スレッドが run()を背負って走る
}
@Override
public void run() {
String line = null;
BufferedReader br = null;
PrintStream os = null;
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());
}
}
@SuppressWarnings("resource")
public static void main(String args[]) {
// ソケットの宣言
ServerSocket echoServer = null;
Socket clientSocket = null;
// ポート9999番を開く
try {
echoServer = new ServerSocket(9999);
} catch (IOException e) {
System.out.println(e);
}
while(true) {
// クライアントからの要求を受けるソケットを開く
try {
clientSocket = echoServer.accept();
} catch (IOException e) {
e.printStackTrace();
}
new ThreadEchoServer(clientSocket);
}
}
}