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

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

我一直无法find一个适当的答案,究竟是什么下面的错误意味着:

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

笔记:

这个错误是不经常的,不可预测的; 虽然得到这个错误意味着所有未来的URI请求也将失败。

唯一有效的解决scheme(也是偶尔)是重新启动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();

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

如果您的TLS客户端无法通过configuration为需要客户端身份validation的服务器进行身份validation,也会发生这种情况。

我唯一一次看到这样的事情发生在我连接不好的时候,或者有人closures了我正在使用的不同线程上下文的套接字。

当连接突然closures时(当发送缓冲区中仍然有数据时TCP连接被重置),会发生此错误。 该条件与更常见的“通过对等方重置连接”非常相似。 当通过互联网连接时,它可能会偶尔发生,但是如果时机正确的话(例如在本地主机上保持连接),系统也会发生。

HTTP客户端应该重新打开连接并重试请求。 当连接处于这种状态时,理解这一点很重要,除了closures连接之外,没有任何办法可以解决。 任何发送或接收的尝试都会产生相同的错误。

不要使用URL.open() ,使用具有重试机制,连接池,保持活动和许多其他function的Apache-Commons HttpClient 。

示例用法:

HttpClient httpClient = HttpClients.custom() .setConnectionTimeToLive(20, TimeUnit.SECONDS) .setMaxConnTotal(400).setMaxConnPerRoute(400) .setDefaultRequestConfig(RequestConfig.custom() .setSocketTimeout(30000).setConnectTimeout(5000).build()) .setRetryHandler(new DefaultHttpRequestRetryHandler(5, true)) .build(); // the httpClient should be re-used because it is pooled and thread-safe. HttpGet request = new HttpGet(uri); HttpResponse response = httpClient.execute(request); reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); // handle response ...

你在访问http数据吗? 你可以使用HttpClient库而不是标准库吗? 图书馆有更多的select,并会提供更好的错误信息。

尝试将“autoReconnect = true”添加到jdbc连接string

当连接超时或远程主机终止连接(closures应用程序,closures计算机等)时,这种情况会不时发生。 您可以通过自己pipe理套接字并通过其通信协议处理应用程序中的断开连接,然后调用shutdownInput和shutdownOutput来清除会话,从而避免这种情况。

看看是否有另一个服务或程序在http端口上运行。 当我尝试使用这个端口并且被另一个程序占用时,它发生在我身上。

如果您使用Netbeans来pipe理Tomcat,请尝试在Tools – Servers中禁用HTTP监视器

我也有这个问题。 我的解决scheme是:

sc.setSoLinger(true, 10);

从网站复制 – >通过使用setSoLinger()方法,可以在发送重置之前显式设置延迟,从而为数据读取或发送提供更多的时间。

也许这不是每个人的答案,而是一些人。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,"jedis java.net.SocketException: Software caused connection abort"异常通常是由于网络连接问题或Redis服务器故障引起的。这个异常表示在与Redis服务器建立连接时,连接被意外中断或终止。 以下是一些可能导致此异常的原因和解决方法: 1. 网络连接问题:检查网络连接是否正常,确保可以正常访问Redis服务器。可以尝试使用ping命令来测试与Redis服务器的连接。 2. Redis服务器故障:如果Redis服务器出现故障或崩溃,可能会导致连接中断。在这种情况下,需要检查Redis服务器的日志文件以获取更多信息,并尝试重新启动Redis服务器。 3. 连接超时:如果连接超时时间设置得太短,可能会导致连接中断。可以尝试增加连接超时时间来解决此问题。在Jedis客户端中,可以使用`JedisPoolConfig`类的`setConnectionTimeout`方法来设置连接超时时间。 4. 连接池问题:如果使用连接池管理连接,可能会出现连接池耗尽或连接泄漏的问题。可以尝试增加连接池的最大连接数或检查代码中是否正确释放连接。 5. 防火墙或代理问题:防火墙或代理服务器可能会阻止与Redis服务器的连接。请确保防火墙或代理服务器允许与Redis服务器的通信。 请注意,以上是一些常见的解决方法,具体的解决方法可能因环境和具体情况而异。如果问题仍然存在,请提供更多详细信息以便进一步帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值