テキストをやりとりするクライアント2


ユーザ入力をサーバに送る単純なクライアント

ユーザからの入力を1行毎に読んでサーバに送り、 その度にサーバが返すデータを1行読んで、 それをユーザに表示するクライアントを書いてみましょう。→演習問題



コンピュータネットワーク 演習


提出〆切は次回の講義の開始時刻です。


課題3a

提出先 http://nw.tsuda.ac.jp/class/network/local/handin/list.php?id=kadai3a
提出ファイルTransTextClient.java
コメント欄
動作確認したときの、サーバを動作させた「ターミナル」ウィンドウの内容を
(テキストとして)張りつけて下さい。

クライアントの動作

  1. 8888番ポートで待ち受けているechoサーバに接続する。
  2. 以後、以下の動作を繰り返す。
    1. 標準入力から行単位で入力を読み、サーバに送る。
    2. サーバに1行転送したら、サーバから1行受け取る。
    3. サーバから受け取った文字列を標準出力に出力する。


動作確認

  1. 「ターミナル」のウィンドウを3枚開いて下さい。
  2. 1枚目のウィンドウでサーバ(RunEchoServer.class)を8100番ポートで 動作させましょう。
  3. 2枚目のウィンドウでクライアントの動作確認をして下さい。
    1. クライアント(RunTransTextClient.class)を"localhost"の 8100番ポートに接続させましょう。
    2. クライアントのウィンドウで、英語や日本語(日本語を「ターミナル」に 入力する場合はエディタに入力した文字列をコピー&ペーストすると よいでしょう)を打ち込んで、サーバに送られて、同じ文字列が送り返され 正しく動作することを確認して下さい。
    3. サーバもクライアントも正しく動作していることを確認した後、 まだこのクライアントをサーバに接続したままにして下さい。
  4. 3枚目のウィンドウでクライアントをもうひとつ起動してみましょう。
    1. 3枚目のウィンドウ内で以下の操作をします。
    2. クライアント(RunTransTextClient.class)を"localhost"の 8100番ポートに接続させましょう。
    3. 「接続した」という文字列がサーバの画面にでないことを確認して下さい。
    4. クライアントのウィンドウで、"hello from new client "と入力してみて下さい。
    5. このクライアントにはサーバから文字列が送られてこないし、 2行目以降を新たに入力しても入力が受け付けられない (=画面にエコーバックされない)ことを確認して下さい。
  5. 2枚目のウィンドウで、最初のクライアントを終了させて下さい。
  6. 3枚目のウィンドウのクライアントが動き出すことを確認して下さい。
  7. これにより、現在のサーバは一度にひとつのクライアントの相手しか できないことが確認できたことになります。
RunEchoServer.javaの実行例(演習)
$ javac RunEchoServer.java 
$ java RunEchoServer 8100 
accept: localhost
read: abc
wrote: abc
read: def
wrote: def
read: 私の名前は
wrote: 私の名前は
done
accept: localhost
read: new client
wrote: new client
read: what's up?
wrote: what's up?
done