あらかじめスレッドを作成しておくサーバ(2)


ソケットをBlockingQueueで渡す方法

この場合、各クライアントからの接続要求を受け付けるスレッドは 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 
apple 
apple     ←サーバからの返事
peach 
peach     ←サーバからの返事
melon 
melon     ←サーバからの返事
orange 
orange     ←サーバからの返事
pear 
pear     ←サーバからの返事
           ←Ctl-Cで終了


実行例(クライアント1)
$ java RunTelnetClient localhost 8888 
red 
red     ←サーバからの返事
pink 
pink     ←サーバからの返事
           ←Ctl-Cで終了


実行例(クライアント2)
$ java RunTelnetClient localhost 8888 
tiger 
tiger     ←サーバからの返事
           ←Ctl-Cで終了


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


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


課題7a

提出先 http://ynitta.com/class/network/local/handin/list.php?id=kadai7a
提出ファイルEchoHandler3.java
コメント欄 2スレッドに制限してサーバを動作させたとき、 2個のクライアントまでには正しく対応できるが 3個目のクライアントはサーバが空くまで対応が 待たせられたときにサーバ側の実行例。 コピー&ペーストで貼りつけて置くこと。

EchoHandler3.javaを打ち込んでRunEchoServerThreaded3を動作させて下さい。 EchoHander3を実行するスレッドは2個しか作らないようにしてサーバを 起動し、3個のクライアントを動作させて、動きを確認して下さい。


課題7b

提出先 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個以上探して下さい。