0

私は、ユーザーがクライアントウィンドウを閉じてクライアントプログラムを終了したことを知らせるデータのバイトをクライアントが送信するクライアントとサーバーアプリケーションを持っています。問題は、サーバーがそのクライアントを破棄する前に、最後の通知をそのクライアントに送信する可能性があることです。サーバーがブロッキング モードで SocketChannel の書き込みメソッドを使用する場合、それは無期限にブロックされますか、それとも単に無視されますか? クライアントが切断される前に「切断確認」を待つ必要がありますか?

4

2 に答える 2

1

永久にブロックされることはなく、無視されません。ソケット送信バッファにデータ用の空きがある場合、まったくブロックされない可能性は十分にあります。ブロックすると、IOException: 'connection reset by peer' が発生するか、ブロックが解除されて正常に戻る可能性があります。これを予測することはできません。この状況は正しくなく、発生を許してはなりません。出力のために両方のソケットをシャットダウンし、EOS を取得するまで読み取ることで、合意された相互のクローズ ポイントに到達できます。その場合、両側が同じ点にあり、閉じる場合があります。

于 2012-10-28T00:36:38.850 に答える
1

最後の質問に「はい」。クライアントがこれ以上アプリケーション レベルのデータを送信したり読み取ったりしない状態を含む、別れのプロトコルを設計および実装する必要がありますが、終了時に最終確認をまだ待っています。

于 2012-10-27T22:12:53.257 に答える