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.err.println("またはコマンド killall java を実行して全てのJavaプロセスを終了してください。"); 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()); } } } }