package j2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class EchoServer {
public static void main(String args[]) {
if (args.length < 2) {
args = new String[2];
args[0] = "127.0.0.1";
args[1] = "9999"; // ポート9999番を開く
}
new EchoServer(args[0], args[1]);
}
public EchoServer(String bindaddress, String strport) {
// ソケットや入出力用のストリームの宣言
ServerSocket echoServer = null;
Socket clientSocket = null;
String line;
BufferedReader br;
PrintStream os;
int port = Integer.parseInt(strport);
try {
echoServer = new ServerSocket();
// クライアントからの要求を受けるソケットを開く
echoServer.bind(new InetSocketAddress(bindaddress, port)); // サーバソケットにバインドする=ポートでの待ち受け開始
} catch (IOException e) {
System.err.println(e);
System.err.println("バインド失敗。ポート番号 " + port + " (Bind-address: " + bindaddress + " 向け) がすでにつかわれているようです");
System.err.println("ポート番号またはバインドアドレスを変更してください。");
System.exit(1);
}
System.out.println("EchoServer [" + bindaddress + ":" + port + "] started.");
System.out.println("停止するには CTRL+C をおしてください");
// サーバ側の処理の繰り返し
while (true) {
try {
clientSocket = echoServer.accept(); // 接続がくるまで、ここで待つ
System.out.println("accept");
br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
os = new PrintStream(clientSocket.getOutputStream());
// クライアントからのメッセージを待ち、受け取ったメッセージをそのまま返す
while ((line = br.readLine()) != null) {
System.out.println("(Server received) " + line);
os.println(line);
}
} catch (IOException e) {
System.out.println(e);
} finally {
System.out.println("disconnected " + clientSocket.toString());
}
}
}
}