複数のクライアントから接続を受信する小さなサーバーアプリケーションがあります。クライアントは接続し、メッセージを送信して切断しますが、応答は返されません。
ServerSocketChannelを使用して接続をリッスンしています。セレクターを使用して新しい接続の通知を受け取ります。これが発生した場合、SocketChannelをセレクターに登録します。SelectionKey.OP_READ
いつ通知を受け取るかわからないのは、データを読み取ることができるということです。私のSocketChannelsはノンブロッキングモードです。channel.read(buffer)
SocketChannelを呼び出してバイトバッファに読み込みます。読み取り用のjavadocから、ストリームの終わりを示す-1が得られるまで、これを繰り返し呼び出す必要があります。ただし、再度readを呼び出す前に、セレクターが再度通知するのを待つ必要があるかどうかはわかりません。あれは:
- セレクターからデータが利用可能であることが通知されます。
- 私は既読と呼びます
- 次に、-1が返されるまでもう一度readを呼び出す必要がありますか、それともセレクターに通知させてからもう一度readを呼び出す必要があります。
どうもありがとう