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

2022-08-31 11:24:15

我无法找到以下错误的确切含义的充分答案:

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();

答案 1

这通常意味着存在网络错误,例如 TCP 超时。我会首先在连接上放置一个嗅探器(wireshark),看看你是否能看到任何问题。如果存在 TCP 错误,您应该能够看到它。此外,如果适用,您可以检查路由器日志。如果任何地方都涉及无线,那是这些错误的另一个来源。


答案 2

如果您的 TLS 客户端无法通过配置为要求客户端身份验证的服务器进行身份验证,也会发生这种情况。


推荐