尝试从套接字读取时出现以下错误。我正在做一个 readInt()
InputStream
,我收到这个错误。仔细阅读文档,这表明连接的客户端部分关闭了连接。在这种情况下,我是服务器。
我可以访问客户端日志文件并且它没有关闭连接,事实上它的日志文件表明我正在关闭连接。那么有人知道为什么会这样吗?还有什么要检查的?当当地资源可能达到阈值时,是否会出现这种情况?
我确实注意到我有以下行:
socket.setSoTimeout(10000);
就在 readInt()
之前。这是有原因的(长话短说),但只是好奇,是否存在这可能导致指示错误的情况?我让服务器在我的 IDE 中运行,我碰巧让我的 IDE 停留在断点上,然后我注意到完全相同的错误开始出现在我自己的 IDE 日志中。
无论如何,只是提一下,希望不是转移注意力。 :-(
原文由 Darryl 发布,翻译遵循 CC BY-SA 4.0 许可协议
有几种可能的原因。
另一端故意重置连接,我不会在这里记录的方式。应用软件很少这样做,而且通常是不正确的,但对于商业软件来说却并非未知。
更常见的是写一个连接导致另一端已经正常关闭。换句话说,应用程序协议错误。
也可能是在套接字接收缓冲区中有未读数据时关闭套接字引起的。
在 Windows 中,“软件导致连接中止”与“连接重置”不同,它是由您发送的网络问题引起的。有一篇关于此的 Microsoft 知识库文章。