gpt4 book ai didi

Java nio 在选择器上读取 SocketChannel

转载 作者:行者123 更新时间:2023-11-29 05:57:25 24 4
gpt4 key购买 nike

我有一个小型服务器应用程序,它接收来自多个客户端的连接。客户端将连接、发送消息并断开连接,没有任何响应发回。

我正在使用 ServerSocketChannel 来监听连接。我使用选择器收到新连接的通知,发生这种情况时,我将 SocketChannel 注册到 SelectionKey.OP_READ

的选择器

我不确定的部分是我何时收到通知数据可供阅读。我的 SocketChannels 处于非阻塞模式。我在 SocketChannel 上调用 channel.read(buffer) 来读入字节缓冲区从用于读取的 javadoc 中,我应该重复调用它,直到我得到一个 -1 指示流的结尾。但是,我不确定在再次调用 read 之前是否应该等待选择器再次通知我。即:

  • 选择器通知我数据可用。
  • 我叫读
  • 然后我应该再次调用 read 直到返回 -1 还是让选择器通知我然后再次调用 read

非常感谢

最佳答案

From the javadoc for read, I should repeatadly call this until I get a -1 indicating the end of the stream.

它没有说任何这样的话。

如果您处于非阻塞模式,您可以一直读取直到它返回 -1 或零。如果它返回零,则套接字接收缓冲区中没有更多待处理的数据,因此您应该返回到选择循环。如果它返回 -1,就是这样,完成,完成,finito,关闭套接字 channel 并进行相应的处理。

关于Java nio 在选择器上读取 SocketChannel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11539361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com