人が返信を返すサーバー

返信メッセージをキーボードから入力

返信メッセージをキーボードから入力するようにするとチャットソフトに近いものになります。

サーバー

このサーバーも 10001 ポートで待ちます。

プログラム名 Server04.java

Server03.javaから変更します。

まず、タイトルのコメント部分を次のようにします。

/** 返信メッセージをキーボードから入力するサーバー */

クラス名も忘れないように

public class Server04 {

次の部分は不要ですので、行ごと消します。

        String henji = "hoge: ok";

次の部分の直前で、henji を入力するようにします。

                outb.write( henji, 0, henji.length() );

つまり、次のようにします。

                InputStreamReader kbdin = new InputStreamReader(System.in);
                BufferedReader kbdinb = new BufferedReader(kbdin);
                System.out.println( "返信:" );
                String henji = kbdinb.readLine();
                
                outb.write( henji, 0, henji.length() );

実行すると次のようになって接続を待ちます

$ java Server04
waiting...

まだサーバーしかなく接続してくるクライアントはありませんのでいつまでもこのままです。しかし,接続があると次のように相手のホスト名とメッセージを表示し,返信のメッセージを入力する状態になります。

$ java Server04
waiting...
vineXX:
Konnichihwa
返信:

ここで何か入力して、Enterキーを押すと、それを送信し、また待機状態になります。

$ java Server04
waiting...
vineXX:
Konnichihwa
返信:
なんでしょう
waiting...

サーバーを停止するには ctrl+c (コントロールキーを押しながらc)で止めます。

これはしばらく止めずにおいて,端末(コンソール)を起動してクライアントを作りましょう。もう一度[アプリケーション]-[プログラミング]-[java]を選ぶのが一番簡単です。

クライアントプログラム

これはほとんどClient03とおなじです。ただメッセージを送信した後、サーバー側で人間が入力をするので時間がかかりますから、待っていることをわかるように表示します。

プログラム名 Client04.java

Client03のメッセージを送信した後で、かつ返信を受け取る前に、次のような待っていることを知らせる表示をする1行を加えます。

System.out.println( "waiting..." );

もちろんクラス名も忘れずに変えますが

public class Client04 {

ここも忘れずに変えましょう

        catch( ArrayIndexOutOfBoundsException e ) {
            System.err.println("Usage:java Client04 hostname message");
        }

実行する時には、

$ java Client04 vineXX Konnichihwa.

というように引数として通信したいホストの名前と、通信内容を引数として入れます。まずは自分の使っているコンピュータのホスト名でテストしましょう。

実行するとサーバーの返答があります。なにが返ってくるかは、相手次第です。

$ java Client04 vineXX Konnichihwa.
waiting...
なんでしょう<-
$

念を押しておきますが、もし、相手がメッセージを受けて返事をするまでの間はクライアントはwaitingと表示して止まっています。

その間に別のクライアントが接続してきたらどうなるでしょうか。

もくじ

聖愛高等学校
http://www.seiai.ed.jp/
Last Modified