diff --git a/src/j3/Phttpd.java b/src/j3/Phttpd.java new file mode 100644 index 0000000..137c98e --- /dev/null +++ b/src/j3/Phttpd.java @@ -0,0 +1,78 @@ +package j3; +// いんちきHTTPサーバPhttpd.java +// このプログラムはポート番号8000番で動作するサーバです +// 使い方java Phttp データファイル名 +// WWWクライアントからの接続に対し,引数で指定したファイルを返します + +// ライブラリの利用 +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.ServerSocket; +import java.net.Socket; + +// Phttpdクラス +class Phttpd{ + public static void main(String args[]){ + // サーバソケット + ServerSocket servsock = null ; + Socket sock ; + + // 入出力 + OutputStream out ; + BufferedReader in ; + FileInputStream infile = null; + byte[] buff = new byte[1024]; + + // その他 + boolean cont = true ; + int i ; + + try{ + // サーバ用ソケットの作成(ポート番号8000番) + servsock = new ServerSocket(8000,300) ; + while(true){ + sock = servsock.accept() ;// 接続要求の受付 + // 接続先の表示 + System.out.println("Connection 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())); + out = sock.getOutputStream() ; + // とりあえず改行を2つ読み飛ばす + for(i = 0; i < 2;++i) + System.out.println(in.readLine() ); + // ファイルの出力 + cont = true ; + while(cont){ + // ファイルからの読み込みとネットワーク出力 + try{ + int n = infile.read(buff); + System.out.write(buff, 0, n); + out.write(buff,0,n) ; + } + catch(Exception e){ + cont = false ; + } + } + // 接続終了 + sock.close() ; + infile.close() ; + } + }catch(IOException e){ + System.exit(1) ; + } + } +} \ No newline at end of file diff --git a/src/j3/Telnet.java b/src/j3/Telnet.java new file mode 100644 index 0000000..03b5283 --- /dev/null +++ b/src/j3/Telnet.java @@ -0,0 +1,60 @@ +package j3; + +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.Socket; + +// Telnetクラス +public class Telnet { + // プログラムの本体main + public static void main(String[] args){ + byte[] buff = new byte[1024];//配列の定義 + char[] cbuff = new char[1024];//配列の定義 + Socket socket = null ;// サーバ接続用ソケット + OutputStream outstr = null;// データ出力用オブジェクト + InputStreamReader instr = null;// データ読み取り用オブジェクト + boolean cont = true ; + // 指定のポートに対して,ソケットを作成します + // 入出力のストリームを作り,データ読み出しを準備します + try{ + socket = new Socket(args[0], Integer.parseInt(args[1])) ; + outstr = socket.getOutputStream() ; //サーバへの送信用 + instr = new InputStreamReader(socket.getInputStream()) ; + } catch (Exception e) { + System.err.println("Network error.") ; + System.exit(1) ; + } + // + while (cont) { + try { + int n = System.in.read(buff); + if(buff[0] == '.') cont = false ; + else outstr.write(buff,0,n) ; + } + // 以下は例外処理です + catch(Exception e){ + // 例外時はプログラムを終了します + System.exit(1); + } + } + // データの終了まで,以下のループを繰り返します + cont = true ; + while (cont) { + try { + int n = instr.read(cbuff); + byte[] b = new String(cbuff).getBytes("UTF-8"); + System.out.write(b, 0, n) ; + } + catch(Exception e){ + // 読み出し終了時にループも終了 + cont = false ; + } + } + try { + instr.close() ; + } catch(Exception e) { + System.err.println("Close failed.") ; + System.exit(1) ; + } + } +} diff --git a/src/run2-3.sh b/src/run2-3.sh index 6c5458c..d673681 100755 --- a/src/run2-3.sh +++ b/src/run2-3.sh @@ -1,12 +1,13 @@ #!/bin/bash -javac -encoding UTF-8 j2/*.java +# TODO: Thread-based +javac -encoding UTF-8 j3/*.java echo "Now, open other terminal, and run Telnet(Java)" -echo ">>>> $ java j2/Telnet localhost 8000"; +echo ">>>> $ java j3/Telnet localhost 8000"; echo ""; echo "start Phttpd" -java j2/Phttpd j2/Phttpd.java +java j3/Phttpd j3/Phttpd.java #echo "type return to exit" #read input_str diff --git a/src/run3-1.sh b/src/run3-1.sh old mode 100755 new mode 100644 index e394c00..ad63f35 --- a/src/run3-1.sh +++ b/src/run3-1.sh @@ -1,8 +1,12 @@ #!/bin/bash -javac -encoding UTF-8 j3/MyFTP.java +javac -encoding UTF-8 j3/*.java -java j3/MyFTP 127.0.0.1 +echo "Now, open other terminal, and run Telnet(Java)" +echo ">>>> $ java j3/Telnet localhost 8000"; +echo ""; +echo "start Phttpd" +java j3/Phttpd j3/Phttpd.java #echo "type return to exit" #read input_str