java.net.SocketException : Connection reset

标签 java sockets networking connection socketexception

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

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

<小时/>

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

socket.setSoTimeout(10000);

就在readInt()之前。这是有原因的(长话短说),但只是好奇,在什么情况下这可能会导致指示的错误?我的服务器在我的 IDE 中运行,我碰巧让我的 IDE 卡在断点上,然后我注意到我的 IDE 日志中开始出现完全相同的错误。

无论如何,只是提一下,希望不是转移注意力。

最佳答案

有几个可能的原因。

  1. 另一端故意重置连接,我不会在此处记录这种方式。对于应用程序软件来说,这样做的情况很少见,而且通常是不正确的,但对于商业软件来说,这种情况并不陌生。

  2. 更常见的是,由于写入另一端已正常关闭的连接而导致。换句话说,应用程序协议(protocol)错误。

  3. 也可能是由于套接字接收缓冲区中有未读数据而关闭套接字导致的。

  4. 在 Windows 中,“软件导致连接中止”与“连接重置”不同,是由您端发送的网络问题引起的。 Microsoft 知识库中有一篇关于此问题的文章。

关于java.net.SocketException : Connection reset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57867661/

相关文章:

java - 多线程 Java Web 服务器

sockets - 无法实现1Gbit UDP吞吐量

C++ 在通过 TCP 发送数据之前发送数据大小

java - NAT背后的UDP打洞

c++ - Boost Asio 不发送 UDP 广播数据包

C++ - 构建带有 header 的数据包并通过 UDP 套接字发送它

java - 设置 Linux 桌面/GUI 环境

java - 如何设置单元格背景颜色(JavaFX,tableview)

java - Jackson lib gradle 的 Eclipse 类路径问题

java - 使用 Room 库获取最近插入的行 ID