一尘不染

java.net.SocketException:连接重置

java

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

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

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

socket.setSoTimeout(10000);

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


阅读 581

收藏
2020-02-27

共1个答案

一尘不染

有几种可能的原因。

  1. 另一端故意重设了连接,在此我将不做记录。应用程序软件很少会这样做,而且通常是不正确的,但对于商业软件而言,这并不是未知的。
  2. 更常见的是,由于写入连接而导致另一端已经正常关闭。换句话说,应用程序协议错误。
  3. 当套接字接收缓冲区中有未读数据时,关闭套接字也会导致此错误。
  4. 在Windows中,“软件引起的连接中止”与“连接重置”不同,这是由您端发送的网络问题引起的。有关于此的Microsoft知识库文章。
2020-02-27