我在尝试从套接字读取时遇到以下错误。我正在对该readInt()进行InputStream,并且出现此错误。仔细阅读文档,这表明连接的客户端部分关闭了连接。在这种情况下,我是服务器。

我可以访问客户端日志文件,但它没有关闭连接,实际上,它的日志文件表明我正在关闭连接。那么,有人知道为什么会这样吗?还有什么要检查的?当有本地资源可能达到阈值时,会出现这种情况吗?

我确实注意到我有以下几行:

socket.setSoTimeout(10000);

就在readInt()之前。这是有原因的(长话短说),但出于好奇,在某些情况下这可能会导致所指示的错误?我的服务器在我的IDE中运行,我碰巧使我的IDE卡在一个断点上,然后我发现完全相同的错误开始出现在我自己的IDE日志中。

无论如何,仅提及它,希望它不会成为红色鲱鱼。 :-(

最佳答案

有几种可能的原因。

  • 另一端已故意重设连接,在此我不会在此处进行记录。应用程序软件很少这样做,而且通常是不正确的,但对于商业软件而言却并非未知。
  • 通常,这是由于写入连接而导致另一端已经正常关闭。换句话说,应用程序协议(protocol)错误。
  • 当套接字接收缓冲区中有未读数据时,也可能是由于关闭套接字而导致的。
  • 在Windows中,“软件导致连接中止”与“连接重置”不同,它是由您的终端发送的网络问题引起的。有关于此的Microsoft知识库文章。
  • 10-08 18:42