この場合、各クライアントからの接続要求を受け付けるスレッドは 1つです。クライアントと通信するソケットを、実際にクライアントの 要求に対応するスレッドに Queueを使って渡します。 java.util.concurrentパッケージのクラスを使うと スレッドに対応しているので簡単に記述することができます (たとえばBlockingQueueを使うなどして)。
RunEchoServerThreaded3.javaの実行例(サーバ) |
$ java RunEchoServerThreaded3 8888 2 0: starts 1: starts accept from /127.0.0.1 0: data=apple 0: data=peach 0: data=melon 0: data=orange accept from /127.0.0.1 1: data=red 1: data=pink accept from /127.0.0.1 1: closed Socket[addr=/127.0.0.1,port=34217,localport=8888] 1: data=tiger 1: closed Socket[addr=/127.0.0.1,port=34218,localport=8888] 0: data=pear 0: closed Socket[addr=/127.0.0.1,port=34216,localport=8888] |
実行例(クライアント0) |
$ java RunTelnetClient localhost 8888 |
実行例(クライアント1) |
$ java RunTelnetClient localhost 8888 |
実行例(クライアント2) |
$ java RunTelnetClient localhost 8888 |
提出〆切は次回の講義の開始時刻です。
提出先 | http://ynitta.com/class/network/local/handin/list.php?id=kadai7a |
---|---|
提出ファイル | EchoHandler3.java |
コメント欄 | 2スレッドに制限してサーバを動作させたとき、 2個のクライアントまでには正しく対応できるが 3個目のクライアントはサーバが空くまで対応が 待たせられたときにサーバ側の実行例。 コピー&ペーストで貼りつけて置くこと。 |
EchoHandler3.javaを打ち込んでRunEchoServerThreaded3を動作させて下さい。 EchoHander3を実行するスレッドは2個しか作らないようにしてサーバを 起動し、3個のクライアントを動作させて、動きを確認して下さい。
提出先 | http://ynitta.com/class/network/local/handin/list.php?id=kadai7b |
---|---|
提出ファイル | なし |
コメント欄 | java.util.concurrentパッケージの中でBlockingQueueインタフェースを implementしているクラス名を6個以上書きなさい。 |
Java API マニュアルを読んで、java.util.concurrentクラスの 中でBlockingQueueインタフェースをimplementしているクラスを 6個以上探して下さい。