diff --git a/src/j2/EchoClient.java b/src/j2/EchoClient.java index 9352dfb..ce0c233 100644 --- a/src/j2/EchoClient.java +++ b/src/j2/EchoClient.java @@ -15,18 +15,22 @@ BufferedReader isbr = null; BufferedReader stdinbr = null; - // ポート9999番を開く - String host = "localhost"; - // String host = "10.104.89.61"; + if (args.length < 2) { + args = new String[2]; + args[0] = "127.0.0.1"; // 接続先アドレス + args[1] = "9999"; //ポート番号 + } + String host = args[0]; + int port = Integer.parseInt(args[1]); try { - socket = new Socket(host, 9999); + socket = new Socket(host, port); dos = new DataOutputStream(socket.getOutputStream()); isbr = new BufferedReader(new InputStreamReader(socket.getInputStream())); stdinbr = new BufferedReader(new InputStreamReader(System.in)); } catch (UnknownHostException e) { System.err.println("Don't know about host: " + host); } catch (IOException e) { - System.err.println("Couldn't get I/O for the connection to: " + host); + System.err.println("Echoサーバ [" + host+":"+port+"] に接続できませんでした"); } // サーバーにメッセージを送る diff --git a/src/j2/EchoServer.java b/src/j2/EchoServer.java index ad19db9..93d8ec7 100644 --- a/src/j2/EchoServer.java +++ b/src/j2/EchoServer.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; +import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; @@ -17,12 +18,24 @@ PrintStream os; Socket clientSocket = null; - // ポート9999番を開く - try { - echoServer = new ServerSocket(9999); - } catch (IOException e) { - System.out.println(e); + 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 { diff --git a/src/j2/TimeClient.java b/src/j2/TimeClient.java index 6e8a26b..3431105 100644 --- a/src/j2/TimeClient.java +++ b/src/j2/TimeClient.java @@ -17,18 +17,21 @@ public static void main(String[] args) { Socket csock = null;// サーバ接続用ソケット BufferedReader reader = null; + if (args.length < 2) { + args = new String[2]; + args[0] = "127.0.0.1"; + args[1] = "5555"; + } // 指定のポートに対して,ソケットを作成します // オブジェクトinstrを作り,データ読み出しを準備します try { - // readsocket = new Socket(args[0], Integer.parseInt(args[1])) ; - csock = new Socket("127.0.0.1", 5555); // ローカルホストのサーバに接続するとき - // csock = new Socket("10.104.89.61", 5555) ;//別ホストのサーバに接続する例(サーバのIPアドレスはip - // aで調査しておく) - // csock = new Socket(arg[0], 5555) ; //サーバのIPアドレスをコマンドライン引数で指定する例 + csock = new Socket(args[0], Integer.parseInt(args[1])) ; // 第2引数は文字列を整数に変換して渡す + // csock = new Socket("127.0.0.1", 5555); // ローカルホストのサーバに接続するとき + // csock = new Socket("10.104.89.61", 5555) ;//別ホストのサーバに接続する例(サーバのIPアドレスはipコマンドで調査しておく) reader = new BufferedReader(new InputStreamReader(csock.getInputStream())); } catch (Exception e) { - System.err.println("ネットワークエラーです"); - System.exit(1); // 異常終了なら1 + System.err.println("サーバ ["+args[0]+":"+args[1]+"] に接続できませんでした"); + System.exit(1); // 異常終了(エラーで終了)なら1 } // データの終了まで,以下のループを繰り返します diff --git a/src/j2/TimeServer.java b/src/j2/TimeServer.java index b4d373f..a63ae3f 100644 --- a/src/j2/TimeServer.java +++ b/src/j2/TimeServer.java @@ -27,10 +27,12 @@ // サーバソケットの作成 svsock = new ServerSocket(); // バインドするアドレスとポートを指定 - // svsock.bind(new InetSocketAddress("0.0.0.0" , 5555)) ; //別のホストからの接続も受け付ける場合 - svsock.bind(new InetSocketAddress("127.0.0.1", 5555)); // ローカルホストからのみ受け付ける場合 + int port = 5555; + String bindadress = "127.0.0.1"; // ローカルホストからのみ受け付ける場合 + //別のホストからの接続も受け付ける場合 "0.0.0.0" + svsock.bind(new InetSocketAddress(bindadress, port)); // サーバソケットにバインドする=ポートでの待ち受け開始 - System.out.println("(TimeServer) 停止するには CTRL+C をおしてください"); + System.out.println("(TimeServer) at ["+bindadress+":"+port+"] \n停止するには CTRL+C をおしてください"); // サーバ側の処理の繰り返し while (true) { diff --git a/src/run1-3.sh b/src/run1-3.sh index 63588e5..39bfc26 100755 --- a/src/run1-3.sh +++ b/src/run1-3.sh @@ -5,8 +5,10 @@ echo done. sleep 1 -echo 'ファイル入出力は、' -sleep 1 +echo 'ネットワーク入出力を扱うまえに、まずはファイル入出力の方法を理解しよう' +sleep 3 +echo 'ReadFileは、コマンドライン引数で指定されたファイルをxxxするプログラムです' +sleep 5 echo '>' java j1.ReadFile j1/ReadFile.java java j1.ReadFile j1/ReadFile.java diff --git a/src/run2-1.sh b/src/run2-1.sh index b4d4439..c2c2d34 100755 --- a/src/run2-1.sh +++ b/src/run2-1.sh @@ -2,22 +2,21 @@ echo '> javac -encoding UTF-8 j2/Time*.java' javac -encoding UTF-8 j2/Time*.java -echo done. +echo 'Time(Server|Client) コンパイル終了' sleep 2 -echo "Now, open other terminal, and run TimeClient by typing" -echo " vvvvvvvvvvvvvvvvvv" -echo ">>>> $ java j2.TimeClient"; -echo " ^^^^^^^^^^^^^^^^^^"; -echo "このあと、TimeServerが起動したら、別ターミナルで上記コマンドを入力してください。" +echo "このあと、TimeServerが起動したら、別ターミナルで cd ~/NWP/src をしたあと、下のコマンドを入力してください。" +echo "" +echo ">>>> $ java j2.TimeClient localhost 5555"; +echo ""; echo "" -sleep 1 +sleep 3 -echo "TimeServer を、起動します。" -sleep 1 -echo "終了するには CTRL+C をおしてください" -sleep 1 +echo "それでは TimeServer を起動します。" +sleep 2 +echo "サーバプログラムを終了するには CTRL+C をおしてください" +sleep 2 echo '>' java j2.TimeServer java j2.TimeServer diff --git a/src/run2-2.sh b/src/run2-2.sh index ddbd3db..6e89ae8 100755 --- a/src/run2-2.sh +++ b/src/run2-2.sh @@ -13,9 +13,9 @@ sleep 2 echo "Now, open other terminal, and run EchoClient" sleep 2 -echo " vvvvvvvvvvvvvvvvvvv" -echo ">>>> $ java j2.EchoClient"; -echo " ^^^^^^^^^^^^^^^^^^^" +echo "" +echo ">>>> $ java j2.EchoClient 127.0.0.1 9999"; +echo "" sleep 2