我有一个使用持久TCP连接的客户端 - 服务器(Java)应用程序,但有时服务器在尝试在套接字上写入时会收到java.io.IOException: Connection reset by peer
异常,但是我没有在客户端看到任何错误日志中。
这个RST可能是由中间代理/路由器引起的,但如果是这样的话,那么客户端也应该看到这个吗?
答案 0 :(得分:0)
如果客户端发送了RST,则可以使用wireshark等数据包嗅探器在其上看到它。但是,它不会出现在任何用户级套接字中,因为它是由OS发送的,作为对各种错误输入的响应(例如对连接端口的连接尝试)。
如果RST是由网络发送的,那么它假装是客户端来切断连接。它可以在一个方向上或在两个方向上这样做。在这种情况下,客户端可能看不到任何内容,当客户端继续将数据发送到它认为是打开的连接时,实际服务器发送的RST除外,而服务器将其视为已关闭。
尝试捕获服务器和客户端上的流量,查看重置的来源。