gpt4 book ai didi

java nio : if read returns -1 does it mean client has closed connection?

转载 作者:行者123 更新时间:2023-11-29 06:13:07 25 4
gpt4 key购买 nike

我有一个关于本教程的问题

http://rox-xmlrpc.sourceforge.net/niotut/

在服务端的read方法中,如果read返回-1,那是不是就代表客户端已经关闭了连接??

我将示例客户端修改为在发送消息后长时间 hibernate 我看到 selector.select() 不会阻塞并保持选择 channel 为可读,即使客户端没有发送任何内容并且服务器读取方法读取并返回-1,从而关闭 channel ,但客户端并没有断开连接。

我不理解这种行为。谁能帮我理解一下?

我正在尝试修改服务器,以便即使客户端未发送任何内容,服务器也不会与客户端断开连接,因此它必须在 selector.select() 处阻塞。

谢谢!

最佳答案

API 应该按照描述的那样工作。当套接字连接关闭时,Read 将返回 -1。这与“消息结束”不同。连接可以因超时而关闭,我注意到您说您让客户端等待“很长时间”。

我还注意到您正在使用特定教程。该教程中的客户端代码在收到响应后专门关闭连接,并为每次发送打开一个新连接。您必须对客户端代码设计进行大量更改才能阻止这种情况。

当我使用未关闭连接的客户端从该教程运行 nio 服务器时,行为如 API 所述 - 服务器线程在 Selector.select() 中等待,而客户端在发送消息之间 hibernate 。

因此,我的回答是,您可能正在使用正在关闭连接的客户端,如果不是您等待的“长时间”,可能会导致网络为您关闭连接。鉴于您描述的行为,我很确定是前者。

关于java nio : if read returns -1 does it mean client has closed connection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6090938/

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