diff --git a/.project b/.project index 2bbddd5..1868ab8 100644 --- a/.project +++ b/.project @@ -16,7 +16,7 @@ - 1631709793499 + 1635165177317 30 diff --git a/src/Frac.java b/src/Frac.java index 8dd8cb5..2065f2c 100644 --- a/src/Frac.java +++ b/src/Frac.java @@ -1,6 +1,7 @@ public class Frac { // 確認用 + public static void main(String[] args) { Frac d1_3 = new Frac(2,3); Frac d1_2 = new Frac(1,2); diff --git a/src/j1/Hello.java b/src/j1/Hello.java index 5a651dd..7b1880b 100644 --- a/src/j1/Hello.java +++ b/src/j1/Hello.java @@ -1,8 +1,8 @@ package j1; // Hello.java -public class Hello{ - public static void main(String[] args){ - System.out.println("Hello!"); +public class Hello { + public static void main(String[] args) { + System.out.println("Hello!"); } } diff --git a/src/j1/HelloNW.java b/src/j1/HelloNW.java index 76f42aa..9d5f071 100644 --- a/src/j1/HelloNW.java +++ b/src/j1/HelloNW.java @@ -1,11 +1,11 @@ package j1; // HelloNW.java -public class HelloNW{ - public static void main(String[] args){ - System.out.println("Hello!"); - System.out.print("Welcome to ") ; - System.out.print("nerwork programming ") ; - System.out.println("in Java!"); - } +public class HelloNW { + public static void main(String[] args) { + System.out.println("Hello!"); + System.out.print("Welcome to "); + System.out.print("nerwork programming "); + System.out.println("in Java!"); + } } diff --git a/src/j1/PrintArgs.java b/src/j1/PrintArgs.java index e3d061e..edc9f4b 100644 --- a/src/j1/PrintArgs.java +++ b/src/j1/PrintArgs.java @@ -7,9 +7,9 @@ // <配列変数名>.length は,配列の要素の数を表す. // なお,< と >で囲まれた日本語はJavaの構文の要素を示す. -public class PrintArgs{ - public static void main(String[] args){ - for(int i = 0; i< args.length; i += 1) - System.out.println("args["+ i+ "] = "+ args[i]); +public class PrintArgs { + public static void main(String[] args) { + for (int i = 0; i < args.length; i += 1) + System.out.println("args[" + i + "] = " + args[i]); } } diff --git a/src/j1/ReadFile.java b/src/j1/ReadFile.java index 314d6f4..be01682 100644 --- a/src/j1/ReadFile.java +++ b/src/j1/ReadFile.java @@ -8,35 +8,32 @@ import java.io.IOException; public class ReadFile { - public static void main(String[] args){ - byte[] buff = new byte[1024]; - FileInputStream infile = null; - - try{ - infile = new FileInputStream(args[0]) ; - } - catch(FileNotFoundException e){ // ファイル準備の失敗 - - System.err.println("Error: File not found.") ; - System.exit(1) ; - } + public static void main(String[] args) { + byte[] buff = new byte[1024]; + FileInputStream infile = null; - while (true) { - try { - int n = infile.read(buff); - System.out.write(buff, 0, n) ; - } - catch(Exception e){ // 読み出し終了 - break; // 繰り返しを終了 - } - } + try { + infile = new FileInputStream(args[0]); + } catch (FileNotFoundException e) { // ファイル準備の失敗 - try{ - infile.close() ; + System.err.println("Error: File not found."); + System.exit(1); + } + + while (true) { + try { + int n = infile.read(buff); + System.out.write(buff, 0, n); + } catch (Exception e) { // 読み出し終了 + break; // 繰り返しを終了 + } + } + + try { + infile.close(); + } catch (IOException e) { + System.err.println("Error(close)."); + System.exit(1); + } } - catch(IOException e){ - System.err.println("Error(close).") ; - System.exit(1) ; - } - } } diff --git a/src/j1/ReadFile2.java b/src/j1/ReadFile2.java index 4ac2236..d3700cd 100644 --- a/src/j1/ReadFile2.java +++ b/src/j1/ReadFile2.java @@ -8,35 +8,32 @@ // 使い方: java Readfile2 <ファイル名> public class ReadFile2 { - public static void main(String[] args){ - byte[] buff = new byte[1024]; - FileInputStream infile = null; - - try{ - infile = new java.io.FileInputStream(args[0]) ; - } - catch(java.io.FileNotFoundException e){ // ファイル準備の失敗 - - System.err.println("Error: File not found.") ; - System.exit(1) ; - } + public static void main(String[] args) { + byte[] buff = new byte[1024]; + FileInputStream infile = null; - while (true) { - try { - int n = infile.read(buff); - System.out.write(buff, 0, n) ; - } - catch(IOException e){ // 読み出し終了 - break; // 繰り返しを終了 - } - } + try { + infile = new java.io.FileInputStream(args[0]); + } catch (java.io.FileNotFoundException e) { // ファイル準備の失敗 - try{ - infile.close() ; + System.err.println("Error: File not found."); + System.exit(1); + } + + while (true) { + try { + int n = infile.read(buff); + System.out.write(buff, 0, n); + } catch (IOException e) { // 読み出し終了 + break; // 繰り返しを終了 + } + } + + try { + infile.close(); + } catch (java.io.IOException e) { + System.err.println("Error(close)."); + System.exit(1); + } } - catch(java.io.IOException e){ - System.err.println("Error(close).") ; - System.exit(1) ; - } - } } diff --git a/src/j1/ReadWrite.java b/src/j1/ReadWrite.java index eb14f5a..155fd45 100644 --- a/src/j1/ReadWrite.java +++ b/src/j1/ReadWrite.java @@ -1,18 +1,18 @@ package j1; public class ReadWrite { - public static void main(String[] args){ - byte[] buff = new byte[1024]; - while (true) { - try { - int n = System.in.read(buff); - System.out.write(buff, 0, n); - System.out.println("文字数は "+n); - if (n==1) break; // Enter(改行)だけだと終了 - } - catch(Exception e){ - System.exit(1); - } + public static void main(String[] args) { + byte[] buff = new byte[1024]; + while (true) { + try { + int n = System.in.read(buff); + System.out.write(buff, 0, n); + System.out.println("文字数は " + n); + if (n == 1) + break; // Enter(改行)だけだと終了 + } catch (Exception e) { + System.exit(1); + } + } } - } } diff --git a/src/j1/TestThread.java b/src/j1/TestThread.java index 0d9c4c4..c57793a 100644 --- a/src/j1/TestThread.java +++ b/src/j1/TestThread.java @@ -5,11 +5,13 @@ public static void main(String[] args) { System.out.print("TestThread started."); - MyThread mt1 = new MyThread("1 ", 1300); //mes, wait msec - MyThread mt2 = new MyThread("2 ", 2900); + MyThread mt1 = new MyThread("1s ", 1000); + MyThread mt2 = new MyThread("2s ", 2000); + MyThread mt3 = new MyThread("2.33s ", 2333); mt1.start(); mt2.start(); + mt3.start(); } }; diff --git a/src/j1/WriteFile.java b/src/j1/WriteFile.java index a8a143b..39ea309 100644 --- a/src/j1/WriteFile.java +++ b/src/j1/WriteFile.java @@ -8,36 +8,36 @@ // プログラムを終了するには,行の先頭にピリオド.を入力する. import java.io.*; + public class WriteFile { - public static void main(String[] args){ - byte[] buff = new byte[1024]; - boolean cont = true ; - FileOutputStream outfile = null; // ファイル出力用オブジェクト - try{ - outfile = new FileOutputStream(args[0]) ; + public static void main(String[] args) { + byte[] buff = new byte[1024]; + boolean cont = true; + FileOutputStream outfile = null; // ファイル出力用オブジェクト + try { + outfile = new FileOutputStream(args[0]); + } catch (FileNotFoundException e) { // ファイル準備の失敗 + System.err.println("File not found"); + System.exit(1); + } + // 行頭でピリオドが入力されるまで繰り返す. + while (cont) { + try { + int n = System.in.read(buff); + System.out.write(buff, 0, n); + if (buff[0] == '.') + cont = false; + else + outfile.write(buff, 0, n); + } catch (Exception e) { + System.exit(1); // プログラムの終了 + } + } + try { + outfile.close(); + } catch (IOException e) { + System.err.println("Error in closing a file"); + System.exit(1); + } } - catch(FileNotFoundException e){ // ファイル準備の失敗 - System.err.println("File not found") ; - System.exit(1) ; - } - // 行頭でピリオドが入力されるまで繰り返す. - while (cont) { - try { - int n = System.in.read(buff); - System.out.write(buff, 0, n) ; - if(buff[0] == '.') cont = false ; - else outfile.write(buff,0,n) ; - } - catch(Exception e){ - System.exit(1); // プログラムの終了 - } - } - try{ - outfile.close() ; - } - catch(IOException e){ - System.err.println("Error in closing a file") ; - System.exit(1) ; - } - } } diff --git a/src/j2/EchoClient.java b/src/j2/EchoClient.java index d30d237..ce0c233 100644 --- a/src/j2/EchoClient.java +++ b/src/j2/EchoClient.java @@ -6,26 +6,31 @@ import java.io.InputStreamReader; import java.net.Socket; import java.net.UnknownHostException; + public class EchoClient { public static void main(String[] args) { // ソケットや入出力用のストリームの宣言 Socket socket = null; DataOutputStream dos = null; BufferedReader isbr = null; - BufferedReader stdinbr = null; - - // ポート9999番を開く - String host = "localhost"; - // String host = "10.104.89.61"; + BufferedReader stdinbr = null; + + 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)); + stdinbr = new BufferedReader(new InputStreamReader(System.in)); } catch (UnknownHostException e) { - System.err.println("Don't know about host: "+host); + 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+"] に接続できませんでした"); } // サーバーにメッセージを送る @@ -38,11 +43,12 @@ String line; while ((line = isbr.readLine()) != null) { System.out.println("Server: " + line); - if (line.equals("quit")) break; - + if (line.equals("quit")) + break; + String s = stdinbr.readLine(); - System.out.println(s); - dos.writeBytes(s+"\n"); + System.out.println(s); + dos.writeBytes(s + "\n"); } // 開いたソケットなどをクローズ diff --git a/src/j2/EchoServer.java b/src/j2/EchoServer.java index 7658143..93d8ec7 100644 --- a/src/j2/EchoServer.java +++ b/src/j2/EchoServer.java @@ -4,44 +4,56 @@ 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; + @SuppressWarnings("resource") + public static void main(String args[]) { + // ソケットや入出力用のストリームの宣言 + ServerSocket echoServer = null; + String line; + BufferedReader br; + PrintStream os; + Socket clientSocket = null; - // ポート9999番を開く - try { - echoServer = new ServerSocket(9999); - } catch (IOException e) { - System.out.println(e); - } - - 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); + if (args.length < 2) { + args = new String[2]; + args[0] = "127.0.0.1"; + // ポート9999番を開く + args[1] = "9999"; } - } - catch (IOException e) { - System.out.println(e); - } finally { - System.out.println("disconnected "+clientSocket.toString()); - } + 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()); + } + } } - } } diff --git a/src/j2/ThreadEchoClient.java b/src/j2/ThreadEchoClient.java index 5172922..e398b66 100644 --- a/src/j2/ThreadEchoClient.java +++ b/src/j2/ThreadEchoClient.java @@ -6,72 +6,75 @@ import java.io.InputStreamReader; import java.net.Socket; import java.net.UnknownHostException; + public class ThreadEchoClient implements Runnable { - BufferedReader isbr = null; - Thread thread = null; - public ThreadEchoClient(Socket socket) { - try { - isbr = new BufferedReader(new InputStreamReader(socket.getInputStream())); - } catch (IOException e) { - e.printStackTrace(); - } - thread = new Thread(this); - thread.start(); - } - - @Override - public void run() { - // サーバーからのメッセージを受け取り画面に表示します - String line; - try { - while ((line = isbr.readLine()) != null) { - System.out.println("Server: " + line); - if (line.equals("quit")) break; - } - } catch (IOException e) { - e.printStackTrace(); - } finally { - System.exit(0); - } - } + BufferedReader isbr = null; + Thread thread = null; - public static void main(String[] args) { - // ソケットや入出力用のストリームの宣言 - Socket socket = null; - DataOutputStream dos = null; - BufferedReader stdinbr = null; - - // ポート9999番を開く - String host = "localhost"; - try { - socket = new Socket(host, 9999); - dos = new DataOutputStream(socket.getOutputStream()); - 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); + public ThreadEchoClient(Socket socket) { + try { + isbr = new BufferedReader(new InputStreamReader(socket.getInputStream())); + } catch (IOException e) { + e.printStackTrace(); + } + thread = new Thread(this); + thread.start(); } - // サーバーにメッセージを送る - if (socket != null && dos != null ) { - new ThreadEchoClient(socket); - try { - // メッセージを送ります - dos.writeBytes("HELLO\n"); - dos.writeBytes("type quit to disconnect\n"); + @Override + public void run() { + // サーバーからのメッセージを受け取り画面に表示します + String line; + try { + while ((line = isbr.readLine()) != null) { + System.out.println("Server: " + line); + if (line.equals("quit")) + break; + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + System.exit(0); + } + } - // 標準入力(キーボード)からのメッセージを送信します - while (true) { - String s = stdinbr.readLine(); - dos.writeBytes(s+"\n"); + public static void main(String[] args) { + // ソケットや入出力用のストリームの宣言 + Socket socket = null; + DataOutputStream dos = null; + BufferedReader stdinbr = null; + + // ポート9999番を開く + String host = "localhost"; + try { + socket = new Socket(host, 9999); + dos = new DataOutputStream(socket.getOutputStream()); + 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); } - } catch (UnknownHostException e) { - System.err.println("Trying to connect to unknown host: " + e); - } catch (IOException e) { - System.err.println("IOException: " + e); - } + // サーバーにメッセージを送る + if (socket != null && dos != null) { + new ThreadEchoClient(socket); + try { + // メッセージを送ります + dos.writeBytes("HELLO\n"); + dos.writeBytes("type quit to disconnect\n"); + + // 標準入力(キーボード)からのメッセージを送信します + while (true) { + String s = stdinbr.readLine(); + dos.writeBytes(s + "\n"); + } + + } catch (UnknownHostException e) { + System.err.println("Trying to connect to unknown host: " + e); + } catch (IOException e) { + System.err.println("IOException: " + e); + } + } } - } } diff --git a/src/j2/ThreadEchoServer.java b/src/j2/ThreadEchoServer.java index 51f1d5f..28cdbee 100644 --- a/src/j2/ThreadEchoServer.java +++ b/src/j2/ThreadEchoServer.java @@ -4,62 +4,77 @@ 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 ThreadEchoServer implements Runnable { - Socket sock; - Thread thread; - ThreadEchoServer(Socket sc){ - sock = sc; - //start running - thread = new Thread(this); - thread.start(); // スレッドが run()を背負って走る - } + Socket sock; + Thread thread; - @Override - public void run() { - String line = null; - BufferedReader br = null; - PrintStream os = null; - - System.out.println("accept"); - try { - br = new BufferedReader(new InputStreamReader(sock.getInputStream())); - os = new PrintStream(sock.getOutputStream()); - // クライアントからのメッセージを待ち、受け取ったメッセージをそのまま返す - while ((line = br.readLine()) != null) { - System.out.println("(Server received) " +line); - os.println(line); - } - } catch (IOException e) { - // os.close(); - System.out.println(e); - } finally { - System.out.println("disconnected "+sock.toString()); - } - } - @SuppressWarnings("resource") - public static void main(String args[]) { - // ソケットの宣言 - ServerSocket echoServer = null; - Socket clientSocket = null; - - // ポート9999番を開く - try { - echoServer = new ServerSocket(9999); - } catch (IOException e) { - System.out.println(e); + ThreadEchoServer(Socket sc) { + sock = sc; + // start running + thread = new Thread(this); + thread.start(); // スレッドが run()を背負って走る } - while(true) { - // クライアントからの要求を受けるソケットを開く - try { - clientSocket = echoServer.accept(); - } catch (IOException e) { - e.printStackTrace(); - } - new ThreadEchoServer(clientSocket); + @Override + public void run() { + String line = null; + BufferedReader br = null; + PrintStream os = null; + + System.out.println("accept"); + try { + br = new BufferedReader(new InputStreamReader(sock.getInputStream())); + os = new PrintStream(sock.getOutputStream()); + // クライアントからのメッセージを待ち、受け取ったメッセージをそのまま返す + while ((line = br.readLine()) != null) { + System.out.println("(Server received) " + line); + os.println(line); + } + } catch (IOException e) { + // os.close(); + System.out.println(e); + } finally { + System.out.println("disconnected " + sock.toString()); + } } - } + + @SuppressWarnings("resource") + public static void main(String args[]) { + // ソケットの宣言 + ServerSocket echoServer = null; + 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("ThreadEchoServer ["+bindaddress+":"+port+"] started."); + + while (true) { + // クライアントからの要求を受けるソケットを開く + try { + clientSocket = echoServer.accept(); + } catch (IOException e) { + e.printStackTrace(); + } + new ThreadEchoServer(clientSocket); + } + } } diff --git a/src/j2/ThreadTimeServer.java b/src/j2/ThreadTimeServer.java index 9951e4a..73899c2 100644 --- a/src/j2/ThreadTimeServer.java +++ b/src/j2/ThreadTimeServer.java @@ -1,5 +1,6 @@ package j2; // 時刻を答えるサーバプログラムTimeServer.java + // このプログラムはポート番号5555番で動作するサーバです // クライアントから接続がきたら、一方的に時刻を返します // このプログラムを停止させるにはコントロールCを入力してください @@ -15,76 +16,87 @@ // TimeServerクラス class ThreadTimeServer implements Runnable { - Socket sock; - Thread thread; - ThreadTimeServer(Socket sc){ - sock = sc; - } - public void startRunning() { - thread = new Thread(this); - thread.start(); - } - @Override - public void run() { - PrintStream os ; - String outstr ; // 出力データを格納する文字列 - Date d ; // 日付時刻処理用オブジェクト + Socket sock; + Thread thread; - System.out.println("(TimeServer) accepted (client has connected)") ; - System.out.println(sock.getRemoteSocketAddress().toString()) ; - try { - os = new PrintStream(sock.getOutputStream()) ; - // 出力用データの作成 - d = new Date() ; - outstr = "\n" - + "Hello, this is TimeServer.\n" - + d.toString() + "\n" ; - System.out.println("(Server-side message) "+ outstr) ; - // データの出力(1回目) - os.println(outstr) ; - Thread.sleep(3000); // 3秒まつ - outstr = new Date().toString() ; - os.println(outstr) ; // データの出力(2回目) - System.out.println("(Server-side message) "+ outstr) ; - Thread.sleep(3000) ; // 3秒まつ - outstr = "Thank you." ; - os.println(outstr); - System.out.println("(Server-side message) "+ outstr) ; - os.close() ; - // 接続終了 - sock.close() ; - System.out.println("(TimeServer) クライアントからの接続を閉じました") ; - } catch (IOException e) { - e.printStackTrace(); - } catch (InterruptedException e) { - e.printStackTrace(); + ThreadTimeServer(Socket sc) { + sock = sc; } - } - public static void main(String args[]){ - ServerSocket svsock= null ;// サーバ用ソケット - Socket sock ;// ソケットの読み書き用オブジェクト - try{ - // サーバソケットの作成 - svsock = new ServerSocket() ; - // バインドするアドレスとポートを指定 - svsock.bind(new InetSocketAddress("0.0.0.0" , 5555)) ; //別のホストからの接続も受け付ける場合 - // svsock.bind(new InetSocketAddress("127.0.0.1", 5555)) ; //ローカルホストからのみ受け付ける場合 - - System.out.println("(TimeServer) 停止するには CTRL+C をおしてください") ; - - // サーバ側の処理の繰り返し - while(true){ - sock = svsock.accept() ;//接続がくるまで待つ - ThreadTimeServer tts = new ThreadTimeServer(sock); - tts.startRunning(); //ThreadTimeServerオブジェクトに残りの処理を任せる - - // これで、次の接続に対応できる - } - } catch(IOException e){ - System.out.println("*** Exception ***") ; - System.out.println(e) ; - System.exit(1) ; + public void startRunning() { + thread = new Thread(this); + thread.start(); } - } + + @Override + public void run() { + PrintStream os; + String outstr; // 出力データを格納する文字列 + Date d; // 日付時刻処理用オブジェクト + + System.out.println("(TimeServer) accepted (client has connected)"); + System.out.println(sock.getRemoteSocketAddress().toString()); + try { + os = new PrintStream(sock.getOutputStream()); + // 出力用データの作成 + d = new Date(); + outstr = "\n" + "Hello, this is TimeServer.\n" + d.toString() + "\n"; + System.out.println("(Server-side message) " + outstr); + // データの出力(1回目) + os.println(outstr); + Thread.sleep(3000); // 3秒まつ + outstr = new Date().toString(); + os.println(outstr); // データの出力(2回目) + System.out.println("(Server-side message) " + outstr); + Thread.sleep(3000); // 3秒まつ + outstr = "Thank you."; + os.println(outstr); + System.out.println("(Server-side message) " + outstr); + os.close(); + // 接続終了 + sock.close(); + System.out.println("(TimeServer) クライアントからの接続を閉じました"); + } catch (IOException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + public static void main(String args[]) { + ServerSocket svsock = null;// サーバ用ソケット + Socket sock;// ソケットの読み書き用オブジェクト + + if (args.length < 2) { + args = new String[2]; + // バインドするアドレスとポートを指定 + args[0] = "127.0.0.1"; + // ポート9999番を開く + args[1] = "5555"; + } + String bindaddress = args[0]; + int port = Integer.parseInt(args[1]); + + try { + // サーバソケットの作成 + svsock = new ServerSocket(); + svsock.bind(new InetSocketAddress(bindaddress, port)); + + System.out.println("(ThreadTimeServer) at ["+bindaddress+":"+port+"] "); + System.out.println(" ThreadTimeServerを停止するには CTRL+C をおしてください"); + + // サーバ側の処理の繰り返し + while (true) { + sock = svsock.accept();// 接続がくるまで待つ + ThreadTimeServer tts = new ThreadTimeServer(sock); + tts.startRunning(); // ThreadTimeServerオブジェクトに残りの処理を任せる + + // これで、次の接続に対応できる + } + } catch (IOException e) { + System.out.println("*** Exception ***"); + System.out.println(e); + System.exit(1); + } + } } diff --git a/src/j2/TimeClient.java b/src/j2/TimeClient.java index dc0f01f..3431105 100644 --- a/src/j2/TimeClient.java +++ b/src/j2/TimeClient.java @@ -13,40 +13,43 @@ // TimeClientクラス public class TimeClient { - // プログラムの本体main - public static void main(String[] args){ - Socket csock = null ;// サーバ接続用ソケット - BufferedReader reader = null; - // 指定のポートに対して,ソケットを作成します - // オブジェクトinstrを作り,データ読み出しを準備します - try{ - // readsocket = new Socket(args[0], Integer.parseInt(args[1])) ; - csock = new Socket("127.0.0.1", 5555) ; //localhost - // csock = new Socket("10.104.91.30", 5555) ; - reader = new BufferedReader(new InputStreamReader(csock.getInputStream())); - } - catch(Exception e){ - System.err.println("ネットワークエラーです") ; - System.exit(1) ; //異常終了なら1 - } + // プログラムの本体main + 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 { + 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("サーバ ["+args[0]+":"+args[1]+"] に接続できませんでした"); + System.exit(1); // 異常終了(エラーで終了)なら1 + } - // データの終了まで,以下のループを繰り返します - String line = null; - try { - while ((line = reader.readLine()) != null) { - System.out.println("[Reply] " + line); - } - } catch (IOException e1) { - e1.printStackTrace(); + // データの終了まで,以下のループを繰り返します + String line = null; + try { + while ((line = reader.readLine()) != null) { + System.out.println("[Reply] " + line); + } + } catch (IOException e1) { + e1.printStackTrace(); + } + // コネクションを閉じます + try { + reader.close(); + } catch (Exception e) { + // ネットワーククローズ失敗です + System.err.println("ネットワークのエラーです"); + System.exit(1); + } } - // コネクションを閉じます - try{ - reader.close() ; - } - catch(Exception e){ - // ネットワーククローズ失敗です - System.err.println("ネットワークのエラーです") ; - System.exit(1) ; - } - } } diff --git a/src/j2/TimeServer.java b/src/j2/TimeServer.java index a3ed7ea..06fcbd7 100644 --- a/src/j2/TimeServer.java +++ b/src/j2/TimeServer.java @@ -1,5 +1,6 @@ package j2; // 時刻を答えるサーバプログラムTimeServer.java + // このプログラムはポート番号5555番で動作するサーバです // クライアントから接続がきたら、一方的に時刻を返します // このプログラムを停止させるにはコントロールCを入力してください @@ -14,56 +15,66 @@ import java.util.Date; // TimeServerクラス -class TimeServer{ - public static void main(String args[]){ - ServerSocket svsock= null ;// サーバ用ソケット - Socket sock ;// ソケットの読み書き用オブジェクト - PrintStream os ; - String outstr ; // 出力データを格納する文字列 - Date d ; // 日付時刻処理用オブジェクト +public class TimeServer { + public static void main(String args[]) { + ServerSocket svsock = null;// サーバ用ソケット + Socket sock;// ソケットの読み書き用オブジェクト + PrintStream os; + String outstr; // 出力データを格納する文字列 + Date d; // 日付時刻処理用オブジェクト - try{ - // サーバソケットの作成 - svsock = new ServerSocket() ; - // バインドするアドレスとポートを指定 - svsock.bind(new InetSocketAddress("0.0.0.0" , 5555)) ; //別のホストからの接続も受け付ける場合 - // svsock.bind(new InetSocketAddress("127.0.0.1", 5555)) ; //ローカルホストからのみ受け付ける場合 - - System.out.println("(TimeServer) 停止するには CTRL+C をおしてください") ; - - // サーバ側の処理の繰り返し - while(true){ - sock = svsock.accept() ;//接続がくるまで待つ - System.out.println("(TimeServer) accepted (client has connected)") ; - System.out.println(sock.getRemoteSocketAddress().toString()) ; - os = new PrintStream(sock.getOutputStream()) ; - // 出力用データの作成 - d = new Date() ; - outstr = "\n" - + "Hello, this is TimeServer.\n" - + d.toString() + "\n" ; - System.out.println("(Server-side message) "+ outstr) ; - // データの出力(1回目) - os.println(outstr) ; - Thread.sleep(3000); // 3秒まつ - outstr = new Date().toString() ; - os.println(outstr) ; // データの出力(2回目) - System.out.println("(Server-side message) "+ outstr) ; - Thread.sleep(3000) ; // 3秒まつ - outstr = "Thank you." ; - os.println(outstr); - System.out.println("(Server-side message) "+ outstr) ; - os.close() ; - // 接続終了 - sock.close() ; - System.out.println("(TimeServer) クライアントからの接続を閉じました") ; - } - } catch(IOException e){ - System.out.println("*** Exception ***") ; - System.out.println(e) ; - System.exit(1) ; - } catch (InterruptedException e) { - e.printStackTrace(); + if (args.length < 2) { + args = new String[2]; + args[0] = "0.0.0.0"; + // ローカルホストからの接続のみを受け付ける場合 "127.0.0.1" + // 別のホストからの接続も受け付ける場合 "0.0.0.0" + + // デフォルトでは、ポート5555番を開く + args[1] = "5555"; + } + String bindaddress = args[0]; + int port = Integer.parseInt(args[1]);// 文字列を整数に変換 + try { + svsock = new ServerSocket(); // サーバソケットの作成 + svsock.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("TimeServer started. [" + bindaddress + ":" + port + "]"); + System.out.println("停止するには CTRL+C をおしてください"); + + // サーバ側の処理の繰り返し + try { + while (true) { + sock = svsock.accept();// 接続がくるまで待つ + System.out.println("(TimeServer) accepted (client has connected)"); + System.out.println(sock.getRemoteSocketAddress().toString()); + os = new PrintStream(sock.getOutputStream()); + // 出力用データの作成 + d = new Date(); + outstr = "\n" + "Hello, this is TimeServer.\n" + d.toString() + "\n"; + System.out.println("(Server-side message) " + outstr); + // データの出力(1回目) + os.println(outstr); + Thread.sleep(3000); // 3秒まつ + outstr = new Date().toString(); + os.println(outstr); // データの出力(2回目) + System.out.println("(Server-side message) " + outstr); + Thread.sleep(3000); // 3秒まつ + outstr = "Thank you."; + os.println(outstr); + System.out.println("(Server-side message) " + outstr); + os.close(); + // 接続終了 + sock.close(); + System.out.println("(TimeServer) クライアントからの接続を閉じました"); + } + } catch (Exception ex) { + ex.printStackTrace(); + } } - } } diff --git a/src/j3/Phttpd.java b/src/j3/Phttpd.java index 58c1e2a..4cfa9e5 100644 --- a/src/j3/Phttpd.java +++ b/src/j3/Phttpd.java @@ -1,5 +1,6 @@ package j3; // いんちきHTTPサーバPhttpd.java (pseudo-HTTP-Daemon) pseudoの発音はスード + // このプログラムはポート番号8000番で動作するサーバです // 使い方: java j3.Phttpd ファイル名 // WWWクライアントからの接続に対して、引数で指定したファイルを返します。 @@ -14,78 +15,80 @@ import java.net.Socket; // Phttpdクラス -class Phttpd{ - public static void main(String args[]){ - // サーバソケット - ServerSocket servsock = null ; - Socket sock ; +public class Phttpd { + public static void main(String args[]) { + // サーバソケット + ServerSocket servsock = null; + Socket sock; - // 入出力 - DataOutputStream dostr; - BufferedReader in ; - FileInputStream infile = null; - byte[] buff = new byte[1024]; + // 入出力 + DataOutputStream dostr; + BufferedReader in; + FileInputStream infile = null; + byte[] buff = new byte[1024]; - // その他 - boolean cont = true ; + // その他 + boolean cont = true; - try{ - // サーバ用ソケットの作成(ポート番号8000番) - servsock = new ServerSocket(8000) ; - while(true){ - sock = servsock.accept() ;// 接続要求の受付 - // 接続先の表示 - System.out.println("---\nConnection Requst from: " - + (sock.getInetAddress())) ; - // オブジェクトinfileを作り,ファイルを準備します - try{ - infile = new FileInputStream(args[0]) ; + if (args.length == 0) // 引数がない場合、以下のファイルを返すことにする + args = new String[] { "src/j3/index.html" }; // 相対パスで指定。windowsの場合、user.dir=NWP + // args = new String[] { "j3/index.html" };//Linuxの場合、通常はcd NWP/src しているはず + System.out.println("このサーバは" + args[0] + "を返します。"); + System.out.println(System.getProperty("user.dir")); + try { + // サーバ用ソケットの作成(ポート番号8000番) + servsock = new ServerSocket(8000); + while (true) { + sock = servsock.accept();// 接続要求の受付 + // 接続先の表示 + System.out.println("---\nConnection Requst from: " + (sock.getInetAddress())); + // オブジェクトinfileを作り,ファイルを準備します + try { + infile = new FileInputStream(args[0]); + } catch (Exception e) { + // ファイル準備の失敗 + System.err.println("ファイルがありません"); + System.exit(1); + } + // 読み書き用オブジェクトの生成 + in = new BufferedReader(new InputStreamReader(sock.getInputStream())); + dostr = new DataOutputStream(sock.getOutputStream()); + // read headers + StringBuffer request = new StringBuffer(); + String line; + while ((line = in.readLine()) != null) { + System.out.println(line); + request.append(line + "\r\n"); + if (line.length() < 1) + break; + } + + // Response Headerの出力 + String CRLF = "\r\n"; + String response = "HTTP/1.1 200" + CRLF + "Content-type: text/html; charset=UTF-8" + CRLF + CRLF; + dostr.write(response.getBytes()); + + // Response Bodyの出力 + cont = true; + while (cont) { + // ファイルからの読み込みとネットワーク出力 + try { + int n = infile.read(buff); + dostr.write(buff, 0, n); + } catch (Exception e) { // end of file + cont = false; + } + } + // おまけ:レスポンスヘッダを表示 + dostr.write(request.toString().getBytes()); + + // 接続終了 + sock.close(); + infile.close(); + } + } catch (IOException e) { + System.out.println("異常終了:ポート番号の重複の可能性あり"); + System.exit(1); // 異常終了は1 } - catch(Exception e){ - // ファイル準備の失敗 - System.err.println("ファイルがありません") ; - System.exit(1) ; - } - // 読み書き用オブジェクトの生成 - in = new BufferedReader(new InputStreamReader(sock.getInputStream())); - dostr = new DataOutputStream(sock.getOutputStream() ); - // read headers - StringBuffer request = new StringBuffer(); - String line; - while( (line = in.readLine()) != null ){ - System.out.println(line); - request.append(line+"\r\n"); - if (line.length() < 1) break; - } - - // Response Headerの出力 - String CRLF = "\r\n"; - String response = - "HTTP/1.1 200" + CRLF + - "Content-type: text/html; charset=UTF-8" + CRLF + CRLF; - dostr.write(response.getBytes()); - - // Response Bodyの出力 - cont = true ; - while(cont){ - // ファイルからの読み込みとネットワーク出力 - try{ - int n = infile.read(buff); - dostr.write(buff,0,n) ; - } - catch(Exception e){ //end of file - cont = false ; - } - } - // おまけ:レスポンスヘッダを表示 - dostr.write(request.toString().getBytes()); - - // 接続終了 - sock.close() ; - infile.close() ; - } - }catch(IOException e){ - System.exit(1) ; // 異常終了は1 } - } } diff --git a/src/j3/Thttpd.java b/src/j3/Thttpd.java new file mode 100644 index 0000000..6471935 --- /dev/null +++ b/src/j3/Thttpd.java @@ -0,0 +1,170 @@ +package j3; +/** いんちきHTTPサーバThttpd.java スレッド対応版 + +このプログラムはポート番号8000番で動作するサーバです。 +使い方: java j3.Thttpd ファイル名 ポート番号 +WWWクライアントからの接続に対して、引数で指定したファイルを返します。 +また、そのファイルがあるフォルダを、DocumentRootとします。 + */ + +// ライブラリの利用 +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.SocketException; +import java.time.LocalDateTime; +import java.util.Enumeration; + +// Thttpdクラス +public class Thttpd { + public static void main(String args[]) { + // サーバソケット + ServerSocket servsock = null; + Socket sock; + + + if (args.length == 0) // 引数がない場合、以下のファイルを返すことにする + args = new String[] { "src/j3/index.html", "8000" }; // 相対パスで指定。windowsの場合、user.dir=NWP + // args = new String[] { "j3/index.html" ,"8000"};//Linuxの場合、通常はcd NWP/srcしているはず + int portnum = Integer.parseInt(args[1]); + System.out.println("このサーバは" + args[0] + "を返します。ポート番号は "+portnum+" です。"); + // System.out.println(System.getProperty("user.dir")); + + showUrls(portnum); + try { + // サーバ用ソケットの作成(デフォルトでは、ポート番号8000番) + servsock = new ServerSocket(portnum); + while (true) { + sock = servsock.accept();// 接続要求の受付 + new RequestHandler(sock, args[0]); + } + } catch (IOException e) { + System.out.println("異常終了:ポート番号(" + portnum + ")がすでに使われているようです"); + System.exit(1); // 異常終了は1 + } + } + + /** + * ネットワークインタフェースを調べて、10.104ではじまるIPアドレスについて表示する + */ + public static void showUrls(int pnum){ + Enumeration interfaces; + try { + interfaces = NetworkInterface.getNetworkInterfaces(); + while (interfaces.hasMoreElements()) { + NetworkInterface n = (NetworkInterface) interfaces.nextElement(); + Enumeration addresses = n.getInetAddresses(); + while (addresses.hasMoreElements()) { + InetAddress i = (InetAddress) addresses.nextElement(); + String ip = i.getHostAddress(); + String[] seg = ip.split("\\."); // .で文字列分割 + if (seg.length==4) //分割したセグメントが4つあればIPv4 + System.out.println("http://"+ip+":"+pnum); + } + } + } catch (SocketException e1) { + e1.printStackTrace(); + } + + } +} + +class RequestHandler implements Runnable { + Socket sock; + Thread thread; + + // 入出力 + DataOutputStream dostr; + BufferedReader in; + FileInputStream infile = null; + byte[] buff = new byte[1024]; + String file; + + RequestHandler(Socket s, String file) { + sock = s; + this.file = file; + thread = new Thread(this); + thread.start(); + } + + public void run() { + try { + process(); + } catch (IOException e) { + e.printStackTrace(); + } + thread = null; + } + + void process() throws IOException { + System.out.println("---\nConnection Requst from: " + (sock.getInetAddress())); + // 読み書き用オブジェクトの生成 + in = new BufferedReader(new InputStreamReader(sock.getInputStream())); + dostr = new DataOutputStream(sock.getOutputStream()); + // read headers + StringBuffer request = new StringBuffer(); + String line; + String[] get = null; // GETリクエストをスペースで区切った配列 + while ((line = in.readLine()) != null) { + System.out.println(line); + // 先頭がGETだったら + if (line.toLowerCase().startsWith("get ")) { + get = line.split(" "); // GET / HTTP/1.1 をスペースで区切った配列get を得る + } + request.append(line + "\r\n"); + if (line.length() < 1) + break; + } + + String CRLF = "\r\n"; + // Response Headerの出力 + String response = "HTTP/1.1 200" + CRLF + "Content-type: text/html; charset=UTF-8" + CRLF + CRLF; + // もし、リクエストがfaviconだったら + if (get[1].endsWith(".ico")) { + response = "HTTP/1.1 200" + CRLF + "Content-type: image/x-icon" + CRLF + CRLF; + } else if (get[1].endsWith(".java")) { + response = "HTTP/1.1 200" + CRLF + "Content-type: text/plain; charset=UTF-8" + CRLF + CRLF; + } + if (!get[1].equals("/")) { // リクエストファイルがあれば、/index.html の部分を書き換える + file = file.replaceAll("/index.html", get[1]); + } + // オブジェクトinfileを作り,ファイルを準備します + try { + infile = new FileInputStream(file); + } catch (Exception e) { + // ファイル準備の失敗 + System.err.println(file + " ファイルがありません"); + response = "HTTP/1.1 404" + CRLF + CRLF; + } + dostr.write(response.getBytes()); + + // Response Bodyの出力 + boolean cont = true; + while (cont) { + // ファイルからの読み込みとネットワーク出力 + try { + int n = infile.read(buff); + dostr.write(buff, 0, n); + } catch (Exception e) { // end of file + cont = false; + } + } + if (file.endsWith("index.html")) { + // おまけ:レスポンスヘッダを表示 + dostr.write(request.toString().getBytes()); + // おまけ:時刻表示 + dostr.write(" \n\n

Current DateTime (Thttpdが動的に生成した情報)

".getBytes()); + dostr.write(LocalDateTime.now().toString().getBytes()); + } + + // 接続終了 + sock.close(); + infile.close(); + } +} diff --git a/src/j3/favicon.ico b/src/j3/favicon.ico new file mode 100644 index 0000000..16f4f78 --- /dev/null +++ b/src/j3/favicon.ico Binary files differ diff --git a/src/j3/index.html b/src/j3/index.html index b306dba..54018fd 100644 --- a/src/j3/index.html +++ b/src/j3/index.html @@ -1,21 +1,25 @@ + - -Motoki Miura + + Motoki Miura +

Motoki Miura

- 三浦のWebサイト +

このサーバの別のコンテンツ:src.html +

-
+

外部のコンテンツ: + 三浦のWebサイト
+ +

- - - - -

Request Header

-
+  
+  

Request Header (ブラウザからの情報)

+
\ No newline at end of file
diff --git a/src/j3/src.html b/src/j3/src.html
new file mode 100644
index 0000000..270fa9a
--- /dev/null
+++ b/src/j3/src.html
@@ -0,0 +1,23 @@
+
+
+
+
+SourceCode
+
+
+
+  

Source Code for Thttpd

+ + Toppage + +
+ + Telnet.java + +
+ Thttpd.java + +
+ + + \ No newline at end of file diff --git a/src/run1-1.sh b/src/run1-1.sh index 61e4cde..97e9087 100755 --- a/src/run1-1.sh +++ b/src/run1-1.sh @@ -16,6 +16,8 @@ sleep 1 # Java Class fileの中身を見てみる +echo 'hexdump は、バイナリファイルを16進ダンプするコマンドです' +sleep 1 echo '>' hexdump -C j1/Hello.class sleep 1 hexdump -C j1/Hello.class @@ -37,4 +39,14 @@ java j1.HelloNW echo done. +sleep 5 +echo '本実験では、コマンド入力の省力化のため、本来であれば1つずつ実行して理解すべき一連のコマンドを「シェルスクリプト」として提供しています。' +sleep 5 +echo 'もし余裕があれば、自分でコマンドを1つずつ打ち込んでみることをおすすめします。Tabキー(x2)による補完と、↑↓キーによる履歴呼出しを活用しましょう。' +sleep 5 +echo '「なにが行われていたか」を理解するには、シェルスクリプトだけではなく、Javaソースコードを読む必要があります。' +sleep 5 +echo 'サーバの導通と応答速度を確認 ping -c 回数 IPaddr' +echo '>' ping -c 10 10.104.89.66 +ping -c 10 10.104.89.66 \ No newline at end of file diff --git a/src/run1-2.sh b/src/run1-2.sh index db02f87..1a994dd 100755 --- a/src/run1-2.sh +++ b/src/run1-2.sh @@ -5,6 +5,10 @@ echo done. sleep 1 +echo 'プログラム実行時に、コマンドライン引数を指定することができます' +sleep 1 +echo 'Javaの場合、main関数の引数(文字列の配列)として、うけとることができます' +sleep 2 echo '>' java j1.PrintArgs ABC 123 sleep 1 java j1.PrintArgs ABC 123 @@ -19,6 +23,8 @@ echo done. sleep 1 +echo 'スレッドとは、1つのプロセスのなかで、複数の処理を同時に動かす仕組みです' +sleep 2 echo To stop the TestThread program, press CTRL+C. sleep 1 echo '' diff --git a/src/run1-3.sh b/src/run1-3.sh index ef060a2..39bfc26 100755 --- a/src/run1-3.sh +++ b/src/run1-3.sh @@ -5,6 +5,11 @@ echo done. 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..840021b 100755 --- a/src/run2-1.sh +++ b/src/run2-1.sh @@ -2,25 +2,30 @@ 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 'ホスト名の確認 (cat /etc/hostname)' +cat /etc/hostname +sleep 2 +echo 'IPアドレスの確認 (ip a)' +ip a | grep inet +sleep 2 + +echo "このあと、TimeServerが起動したら、別ターミナルで cd ~/NWP/src をしたあと、下のコマンドを入力してください。" +echo "" +echo ">>>> $ java j2.TimeClient 127.0.0.1 5555" echo "" -sleep 1 +sleep 3 -echo "TimeServer を、起動します。" -sleep 1 -echo "終了するには CTRL+C をおしてください" -sleep 1 +echo "それでは TimeServer を起動します。コマンドライン引数で、バインドアドレスとポート番号を指定することができます。" +sleep 2 +echo "TimeServerを終了するには CTRL+C をおしてください" +sleep 2 -echo '>' java j2.TimeServer -java j2.TimeServer +echo '>' java j2.TimeServer 127.0.0.1 5555 +java j2.TimeServer 127.0.0.1 5555 diff --git a/src/run2-2.sh b/src/run2-2.sh index ddbd3db..4851217 100755 --- a/src/run2-2.sh +++ b/src/run2-2.sh @@ -2,28 +2,35 @@ echo '> javac -encoding UTF-8 j2/Echo*.java' javac -encoding UTF-8 j2/Echo*.java -echo done. +echo 'Echo(Server|Client) コンパイル終了' +sleep 2 + +echo 'ホスト名の確認 (cat /etc/hostname)' +cat /etc/hostname +sleep 2 +echo 'IPアドレスの確認 (ip a)' +ip a | grep inet sleep 2 echo "このあと、EchoServerを起動します。" sleep 2 -echo "別ターミナルで、EchoClientを起動してください。" +echo "別ターミナルで cd ~/NWP/src をしたあと、EchoClientを起動してください。" sleep 2 echo "EchoClientは、quit と入力すると、接続終了します。" sleep 2 echo "Now, open other terminal, and run EchoClient" sleep 2 -echo " vvvvvvvvvvvvvvvvvvv" -echo ">>>> $ java j2.EchoClient"; -echo " ^^^^^^^^^^^^^^^^^^^" +echo "" +echo ">>>> $ java j2.EchoClient localhost 9999"; +echo "" sleep 2 -echo "それでは、EchoServerを起動します。" +echo "それでは、EchoServer を起動します。" sleep 2 -echo '>' java j2.EchoServer -java j2.EchoServer +echo '>' java j2.EchoServer 127.0.0.1 9999 +java j2.EchoServer 127.0.0.1 9999 diff --git a/src/run2-3.sh b/src/run2-3.sh index fa93957..bc90164 100755 --- a/src/run2-3.sh +++ b/src/run2-3.sh @@ -2,23 +2,30 @@ echo '> javac -encoding UTF-8 j2/ThreadTime*.java j2/TimeClient.java' javac -encoding UTF-8 j2/ThreadTime*.java j2/TimeClient.java -echo done. -sleep 1 +echo 'ThreadTimeServer,TimeClient コンパイル終了' +sleep 2 + +echo 'ホスト名の確認 (cat /etc/hostname)' +cat /etc/hostname +sleep 2 +echo 'IPアドレスの確認 (ip a)' +ip a | grep inet +sleep 2 echo "これから、ThreadTimeServerを起動します。" sleep 2 -echo "起動したら、(2-1)と同じように、TimeClientを起動して接続してください。" +echo "起動したら、(2-1)(2-2)と同じように、TimeClientを起動して接続してください。" sleep 2 echo "Now, open other terminal, and run TimeClient by typing" sleep 2 -echo " vvvvvvvvvvvvvvvvvv" -echo ">>>> $ java j2.TimeClient"; -echo " ^^^^^^^^^^^^^^^^^^"; +echo "" +echo ">>>> $ java j2.TimeClient localhost (portnum)"; +echo ""; echo "" sleep 2 echo "それでは、ThreadTimeServer を起動します。" -echo '>' java j2.ThreadTimeServer -java j2.ThreadTimeServer +echo '>' java j2.ThreadTimeServer localhost 5555 +java j2.ThreadTimeServer localhost 5555 diff --git a/src/run2-4.sh b/src/run2-4.sh index db2e5ef..a9be100 100755 --- a/src/run2-4.sh +++ b/src/run2-4.sh @@ -2,21 +2,28 @@ echo '> javac -encoding UTF-8 j2/ThreadEcho*.java j2/EchoClient.java' javac -encoding UTF-8 j2/ThreadEcho*.java j2/EchoClient.java -echo done. -sleep 1 +echo 'ThreadEchoServer,EchoClient コンパイル終了' +sleep 2 + +echo 'ホスト名の確認 (cat /etc/hostname)' +cat /etc/hostname +sleep 2 +echo 'IPアドレスの確認 (ip a)' +ip a | grep inet +sleep 2 echo "このあと、ThreadEchoServerを起動します。" sleep 2 echo "起動したら、別ターミナルでEchoClientを起動し接続してください。" sleep 2 -echo ">>>> $ java j2.EchoClient"; -echo " ^^^^^^^^^^^^^^^"; +echo ">>>> $ java j2.EchoClient (host) (port)"; +echo ""; sleep 2 echo "それでは、ThreadEchoServerを、起動します。" sleep 2 -echo '>' java j2.ThreadEchoServer -java j2.ThreadEchoServer +echo '>' java j2.ThreadEchoServer localhost 9999 +java j2.ThreadEchoServer localhost 9999 #echo "type return to exit" #read input_str diff --git a/src/run3-1.sh b/src/run3-1.sh index 2cc89eb..d2cc0b5 100755 --- a/src/run3-1.sh +++ b/src/run3-1.sh @@ -3,17 +3,23 @@ echo '> javac -encoding UTF-8 j3/*.java' javac -encoding UTF-8 j3/*.java +echo 'ホスト名の確認 (cat /etc/hostname)' +cat /etc/hostname +sleep 2 +echo 'IPアドレスの確認 (ip a)' +ip a | grep inet +sleep 2 + echo "Now, open other terminal, and run Telnet(Java program)" echo ">>>> $ java j3.Telnet localhost 8000"; echo ""; -echo "start Phttpd" +echo "start Thttpd" echo "クライアントに返すコンテンツとして、とりあえず、適当なHTMLファイルをつかいます" sleep 1 -echo "Phttpdを起動します。(Port = 8000)" -echo '>' java j3.Phttpd j3/index.html -java j3.Phttpd j3/index.html +echo "Thttpdを起動します。(Port = 8000)" +echo '>' java j3.Thttpd j3/index.html 8000 +java j3.Thttpd j3/index.html 8000 #echo "type return to exit" #read input_str -