3

接続が確立された後、一定期間データが受信されない場合、タイムアウトを設定して NIO SocketChannel を閉じる最良の方法は何ですか?

4

2 に答える 2

10

また:

  1. を使用してSelectorいる場合、再生できる選択タイムアウトがあり、それがオフになった場合(select(timeout)ゼロを返す)、登録されているすべてのチャネルを閉じます。または

  2. ブロッキング モードを使用しています。この場合Socket.setSoTimeout()、基礎となるソケット ( ) を呼び出して、でタイムアウトが発生したときにスローされるSocketChannel.socket()をトラップできるはずですが、サポートされていないためできません。チャネルとして開始されたソケット、またはSocketTimeoutExceptionread()

  3. なしでノンブロッキング モードを使用してSelectorいます。この場合、ケース (1) に変更する必要があります。

したがって、ケース(1)またはjava.net.Socket直接使用する必要があります。

于 2013-06-27T10:47:28.010 に答える