Era*_*dan 147 java sockets tomcat exception stack-trace
鉴于此堆栈跟踪代码段
引起:java.net.SocketException:软件导致连接中止:
java.net.SocketOutputStream.socketWrite0(本机方法)中的套接字写入错误
我试着回答以下问题:
关于#1:
Sun的JVM源代码不包含这个确切的消息,但我认为文本软件导致连接中止:套接字写入错误来自本机实现SocketOutputStream
:
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
Run Code Online (Sandbox Code Playgroud)
关于#2
我的猜测是,它是在客户端终止连接之前,在获得完整响应之前引起的(例如,发送请求,但在获得完整响应之前,它已关闭/终止/脱机)
问题:
我需要证明这个堆栈跟踪是套接字客户端的"错误",并且服务器没有做任何事情来避免它.(除了捕获异常,或使用非Sun JVM SocketOutputStream,但两者都没有真正避免客户端终止的事实)
use*_*421 51
当本地网络系统中止连接时,例如,当数据重新传输失败后,WinSock关闭已建立的连接时,接收器永远不会确认数据流套接字上发送的数据,就会发生此错误.
请参阅此MSDN文章.另请参阅有关"软件导致的连接中止"的一些信息.
ken*_*orb 10
所述java.net.SocketException
当存在创建或访问引发错误的插座(如TCP).这通常可以在服务器终止连接(没有正确关闭)时引起,因此在获得完整响应之前.在大多数情况下,这可能是由超时问题引起的(例如,响应花费太多时间或服务器因请求而过载),或者客户端发送了SYN,但它没有收到ACK(确认连接终止) .对于超时问题,您可以考虑增加超时值.
套接字异常通常附带有关该问题的指定详细消息.
详细消息示例:
软件导致连接中止:recv失败.
该错误表示尝试发送消息,并且连接已被服务器中止.如果在连接到数据库时发生这种情况,则可能与使用不兼容的Connector/J JDBC驱动程序有关.
可能的解决方案:确保您的CLASSPATH中有正确的库/驱动程序.
软件导致连接中止:连接.
当连接到遥控器时出现问题,可能会发生这种情况.例如,由于病毒检查程序拒绝远程邮件请求.
可能的解决方案:检查病毒扫描服务是否阻止传出连接请求的端口.
软件导致连接中止:套接字写入错误.
可能的解决方案:确保您正在向流中写入正确的字节长度.所以仔细检查你发送的是什么.看到这个帖子.
通过对等方重置连接:套接字写入错误/连接被对等方中止:套接字写入错误
应用程序未检查保持活动连接是否已在服务器端超时.
可能的解决方案:在从连接读取之前,确保HttpClient为非null.E13222_01
连接由同行重置.
连接已由对等方(服务器)终止.
连接重置.
由于请求请求,连接已由客户端终止或由连接的服务器端关闭.
小智 9
当工作站/笔记本电脑上的公司防火墙挡住时,我经常看到这种情况,它会终止连接.
例如.我在同一台机器上有一个服务器进程和一个客户端进程.服务器正在侦听所有接口(0.0.0.0),客户端尝试连接到公共/ home接口(请注意不是环回接口127.0.0.1).
如果机器的网络断开(例如wifi关闭),则形成连接.如果机器连接到公司网络(直接或vpn),则形成连接.
但是,如果机器连接到公共wifi(或家庭网络),则防火墙会启动连接.在这种情况下,将客户端连接到环回接口工作正常,而不是家庭/公共接口.
希望这可以帮助.
归档时间: |
|
查看次数: |
299699 次 |
最近记录: |