簡體   English   中英

Java nio讀取選擇器上的SocketChannel

[英]Java nio Reading SocketChannel on a Selector

我有一個小服務器應用程序,它接收來自多個客戶端的連接 客戶端將連接,發送消息並斷開連接,沒有回復響應。

我正在使用ServerSocketChannel來監聽連接。 我收到使用選擇器的新連接的通知,當發生這種情況時,我將SocketChannel注冊到SelectionKey.OP_READ的選擇器

我不確定的部分是當我收到通知數據可供閱讀時。 我的SocketChannel處於非阻塞模式。 我在SocketChannel上調用channel.read(buffer)來讀取字節緩沖區從javadoc中讀取,我應該重復調用它,直到我得到-1表示流的結束。 但是,我不確定在再次調用read之前是否應該等待選擇器再次通知我。 那是:

  • 選擇器通知我數據可用。
  • 我打電話給讀
  • 我是否應該再次調用read直到返回-1,或者我應該讓選擇器通知我然后再次調用read

非常感謝

從javadoc中讀取,我應該重復調用它,直到我得到-1表示流的結束。

它沒有說任何這樣的事情。

如果您處於非阻塞模式,則可以讀取直到它返回-1 或零 如果它返回零,則套接字接收緩沖區中沒有更多數據待處理,因此您應該返回到選擇循環。 如果它返回-1,那就是它,完成,完成,完成,關閉套接字通道並相應地繼續。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM