package j2; // 時刻を答えるサーバプログラムTimeServer.java import java.io.IOException; import java.io.PrintStream; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.util.Date; // TimeServerクラス public class TimeServer { public static void main(String args[]) { if (args.length < 2) { args = new String[2]; // ローカルホストからの接続のみを受け付ける場合 "127.0.0.1" // 別のホストからの接続も受け付ける場合 "0.0.0.0" args[0] = "127.0.0.1"; args[1] = "9999"; // ポート9999番を開く } new TimeServer(args[0], args[1]); } public TimeServer(String bindaddress, String strport) { ServerSocket timeServer = null;// サーバ用ソケット Socket clientSocket;// ソケットの読み書き用オブジェクト PrintStream os; String outstr; // 出力データを格納する文字列 Date d; // 日付時刻処理用オブジェクト int port = Integer.parseInt(strport);// 文字列を整数に変換 try { timeServer = new ServerSocket(); // サーバソケットの作成 // クライアントからの要求を受けるソケットを開く timeServer.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("TimeServer started. [" + bindaddress + ":" + port + "]"); System.out.println("停止するには CTRL+C をおしてください"); // サーバ側の処理の繰り返し while (true) { try { clientSocket = timeServer.accept(); // 接続がくるまで、ここで待つ System.out.println("(TimeServer) accepted (client has connected)"); System.out.println(clientSocket.getRemoteSocketAddress().toString()); os = new PrintStream(clientSocket.getOutputStream()); // 出力用データの作成 d = new Date(); outstr = "\n" + "Hello, this is TimeServer.\n" + d.toString() + "\n"; System.out.println("(サーバ→クライアント) " + outstr); // データの出力(1回目) os.println(outstr); Thread.sleep(3000); // 3秒まつ outstr = new Date().toString(); os.println(outstr); // データの出力(2回目) System.out.println("(サーバ→クライアント) " + outstr); Thread.sleep(3000); // 3秒まつ outstr = "Thank you."; os.println(outstr); System.out.println("(サーバ→クライアント) " + outstr); os.close(); // 接続終了 clientSocket.close(); System.out.println("(TimeServer) クライアントからの接続を閉じました"); } catch (Exception ex) { ex.printStackTrace(); } } } }