相关疑难解决方法(0)

"软件导致连接中止的正式原因:套接字写入错误"

鉴于此堆栈跟踪代码段

引起:java.net.SocketException:软件导致连接中止:
 java.net.SocketOutputStream.socketWrite0(本机方法)中的套接字写入错误

我试着回答以下问题:

  1. 什么代码抛出此异常?(JVM?/ Tomcat?/我的代码?)
  2. 是什么导致抛出此异常?

关于#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

我的猜测是,它是在客户端终止连接之前,在获得完整响应之前引起的(例如,发送请求,但在获得完整响应之前,它已关闭/终止/脱机)

问题:

  1. 以上假设是否正确(#1和#2)?
  2. 这可能与情况有所区别:"由于服务器端的网络错误,"无法写入客户端"?或者会呈现相同的错误消息?
  3. 最重要的:是否有正式文件(例如来自Sun)说明上述内容?

我需要证明这个堆栈跟踪是套接字客户端的"错误",并且服务器没有做任何事情来避免它.(除了捕获异常,或使用非Sun JVM SocketOutputStream,但两者都没有真正避免客户端终止的事实)

java sockets tomcat exception stack-trace

147
推荐指数
3
解决办法
30万
查看次数

java.net.SocketException:软件导致连接中止:recv失败

我无法找到适当的答案,以确定以下错误的含义:

java.net.SocketException: Software caused connection abort: recv failed

笔记:

  • 这个错误不常见且不可预测; 虽然获取此错误意味着将来所有URI请求也将失败.
  • 有效的唯一解决方案(也是偶尔)是重启Tomcat和/或实际机器(在本例中为Windows).
  • URI绝对可用(通过要求浏览器进行提取来确认).

相关代码:

BufferedReader reader;
try { 
 URL url = new URL(URI);
 reader = new BufferedReader(new InputStreamReader(url.openStream())));
} catch( MalformedURLException e ) { 
 throw new IOException("Expecting a well-formed URL: " + e); 
}//end try: Have a stream

String buffer;
StringBuilder result = new StringBuilder();
while( null != (buffer = reader.readLine()) ) { 
 result.append(buffer); 
}//end while: Got the contents.
reader.close();
Run Code Online (Sandbox Code Playgroud)

java sockets

75
推荐指数
3
解决办法
27万
查看次数

标签 统计

java ×2

sockets ×2

exception ×1

stack-trace ×1

tomcat ×1