Java “的官方理由”;软件导致的连接中止:套接字写入错误“;
给定此堆栈跟踪片段 原因:java.net.SocketException: 软件导致的连接中止: 套接字写入错误Java “的官方理由”;软件导致的连接中止:套接字写入错误“;,java,exception,sockets,tomcat,stack-trace,Java,Exception,Sockets,Tomcat,Stack Trace,给定此堆栈跟踪片段 原因:java.net.SocketException: 软件导致的连接中止: 套接字写入错误位于 java.net.SocketOutputStream.socketWrite0(本机) (方法) 我试图回答以下问题: 引发此异常的代码是什么?(JVM?/Tomcat?/My code?) 引发此异常的原因是什么 关于#1: Sun的JVM源代码不包含这个确切的消息,但我认为文本软件导致连接中止:套接字写入错误来自SocketOutputStream的本机实现: priva
位于 java.net.SocketOutputStream.socketWrite0(本机) (方法) 我试图回答以下问题:
SocketOutputStream的本机实现:
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
关于#2
我的猜测是,这是由于客户端在收到完整响应之前终止了连接(例如,发送了请求,但在收到完整响应之前,它关闭/终止/脱机)造成的
问题:
上述假设是否正确(#1和#2)
这与“由于服务器端的网络错误而无法写入客户端”的情况是否有区别?还是会出现相同的错误消息
最重要的是:是否有官方文件(如Sun)说明上述内容?
我需要证明这个堆栈跟踪是socket客户机的“错误”,而服务器也无法避免它。(除了捕获异常,或者使用非Sun JVM SocketOutputStream,尽管两者都不能真正避免客户端已终止的事实)您是否检查了Tomcat源代码和JVM源代码?那可能会给你更多的帮助
我认为你的总体思路是好的。在无法连接的情况下,我希望出现ConnectException
。上面看起来很像是客户端驱动的。为了证明哪个组件出现故障,我将使用监控TCP/IP通信,并查看是谁真正关闭了端口,超时也可能是相关的
当本地网络系统中止连接时,可能会发生此错误
连接,例如WinSock关闭已建立的连接时
数据重新传输失败后(接收器从不确认发送的数据
在数据流套接字上)
看。另请参见。我经常看到,当工作站/笔记本电脑上的公司防火墙挡住了去路时,它会终止连接
我在同一台机器上有一个服务器进程和一个客户端进程。服务器正在侦听所有接口(0.0.0.0),客户端尝试连接到公共/主接口(请注意,不是环回接口127.0.0.1)
如果机器的网络已断开(如wifi已关闭),则会形成连接。如果机器连接到公司网络(直接或vpn),则形成连接
但是,如果机器连接到公共wifi(或家庭网络),则防火墙会启动并终止连接。在这种情况下,将客户端连接到环回接口可以正常工作,但不能连接到主/公共接口
希望这有帮助。对于任何使用简单客户机-服务器程序并出现此错误的人,这是一个未关闭(或提前关闭)输入或输出流的问题。我的服务器在过去2天内抛出此异常,我通过移动断开功能解决了此问题:
outputStream.close();
inputStream.close();
Client.close();
到列表线程的末尾。
如果它对任何人都有帮助。我也面临同样的问题。
这种错误通常是由于客户端已关闭其连接,而服务器仍在尝试在该客户端上写入而发生的。
因此,请确保您的客户端在服务器完成其outputstream之前保持连接打开。
还有一件事,别忘了关闭输入和输出流
希望这有帮助
如果仍然面临问题,请在此处详细介绍您的问题。当创建或访问(例如)时出错,将抛出。这通常会在服务器终止连接(未正确关闭连接)时导致,因此在获得完整响应之前。在大多数情况下,这可能是由于超时问题(例如,响应花费的时间太长或服务器的请求太多)造成的,或者是客户端发送了SYN,但没有收到ACK(连接终止确认)。对于超时问题,可以考虑增加超时值。
套接字异常通常附带有关问题的指定详细信息
详细消息示例:
-
软件导致连接中止:recv失败
此错误表示有人试图发送消息,而您的服务器已中止连接。如果在连接数据库时发生这种情况,则可能与使用有关
可能的解决方案:确保类路径中有适当的库/驱动程序
-
软件导致的连接中止:连接
当连接到远程设备出现问题时,可能会发生这种情况。比如说
可能的解决方案:检查病毒扫描服务是否阻塞了传出连接请求的端口
-
软件导致连接中止:套接字写入错误
可能的解决方案:确保您正在向流中写入正确长度的字节。所以,请仔细检查您发送的内容。看这个
-
对等方重置连接:套接字写入错误/对等方中止连接:套接字写入错误
应用程序未检查服务器端的保持活动连接是否已超时
可能的解决方案:在从连接读取之前,确保HttpClient为非null
-
对等方重置连接
对等方(服务器)已终止连接
-
连接重置
该连接已被
WireMockServer wireMockServer = null;
@Rule
public WireMockRule wireMockRule = new WireMockRule(8089);
java.net.SocketException: Software caused connection abort: recv failed