java.net.SocketException:软件导致连接中止:recv失败
时间:2020-03-06 14:44:53 来源:igfitidea点击:
对于以下错误的确切含义,我无法找到适当的答案:
java.net.SocketException:软件导致连接中止:recv失败。
笔记:
- 此错误很少见且无法预测;尽管出现此错误意味着将来所有对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();
解决方案
我们正在访问http数据吗?可以使用HttpClient库而不是标准库吗?该库具有更多选项,并将提供更好的错误消息。
http://hc.apache.org/httpclient-3.x/
我唯一看到这种情况的发生是当我的连接不良时,或者有人从另一个线程上下文中关闭正在使用的套接字时。
这通常意味着存在网络错误,例如TCP超时。我将从在连接上放置嗅探器(wireshark)开始,看是否可以看到任何问题。如果出现TCP错误,我们应该可以看到它。另外,我们可以检查路由器日志(如果适用)。如果任何地方都涉及无线,那将是造成此类错误的另一个原因。