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 { @SuppressWarnings("resource") public static void main(String args[]) { // ソケットや入出力用のストリームの宣言 ServerSocket echoServer = null; String line; BufferedReader br; PrintStream os; Socket clientSocket = null; if (args.length < 2) { args = new String[2]; args[0] = "127.0.0.1"; // ポート9999番を開く args[1] = "9999"; } String bindaddress = args[0]; int port = Integer.parseInt(args[1]); 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."); 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()); } } } }