サーバー側の各接続にスレッドがあります。クライアントがコマンドを送信していない場合は、サーバーのスレッドがブロックしている:内部TCPソケットから得たOutputStream上のreadLine()を呼び出すクライアントに知らせる間にサーバー側からTCP接続を閉じる
while ((commandHeader = fromNode.readLine()) != null) {
を。 別のスレッドからsocket.close()を呼び出すと、この呼び出しはSocketExceptionで起動し、スレッドは終了できます。クライアントが起動し、コマンドを発行することを決定した場合よりも
しかし、それは無期限
stream.writeBytes("something\n");
ブロックを実行します。私はこれがおそらくTCPのためにうまくいくことを理解しています(それはほんの半分です)。 "QUIT \ n"のように、終了時におそらくクライアントに何かを送るべきです。 EOFを読むこともできます。しかし、私がコマンドを送る前にクライアント上でreadLine()やその他の読み取り操作を呼び出すと、接続が閉じられていないときにデータ待ちをブロックします。 クライアントは、接続をハーフクローズしてから書き込みを試行する方法をどのように検出できますか?