java.net.SocketException:recvfrom 失败:ETIMEDOUT(连接超时)

Posted

技术标签:

【中文标题】java.net.SocketException:recvfrom 失败:ETIMEDOUT(连接超时)【英文标题】:java.net.SocketException: recvfrom failed: ETIMEDOUT (Connection timed out) 【发布时间】:2013-06-04 07:29:37 【问题描述】:

我过于频繁地发出 HTTP 请求,并且在一段时间后收到此异常:

java.net.SocketException: recvfrom failed: ETIMEDOUT(连接超时)

我已经经历了所有这些related post。

但我不知道如何解决这个问题。他们提到要清除 DNS 缓存,但我需要在运行时清除它,这样我的执行就不会停止工作,这在 android 中是不可能的。

谁能告诉我解决办法。

这是我的日志:

06-04 11:14:08.119: W/System.err(8338): java.net.SocketException: recvfrom 失败:ETIMEDOUT(连接超时)06-04 11:14:08.139: W / System.err(8338):在 libcore.io.IoBridge.maybeThrowAfterRecvfrom(IoBridge.java:552) 06-04 11:14:08.139:W/System.err(8338):在 libcore.io.IoBridge.recvfrom(IoBridge.java:516) 06-04 11:14:08.139: W / System.err(8338):在 java.net.PlainSocketImpl.read(PlainSocketImpl.java:489) 06-04 11:14:08.139:W/System.err(8338):在 java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46) 06-04 11:14:08.139:W/System.err(8338):在 java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:241) 06-04 11:14:08.139: W/System.err(8338): 在 org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103) 06-04 11:14:08.139: W/System.err(8338): 在 org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:191) 06-04 11:14:08.139: W/System.err(8338): 在 org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:82) 06-04 11:14:08.139: W/System.err(8338): 在 org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174) 06-04 11:14:08.139: W/System.err(8338): 在 org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:180) 06-04 11:14:08.139: W/System.err(8338): 在 org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235) 06-04 11:14:08.139: W/System.err(8338): 在 org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259) 06-04 11:14:08.139: W/System.err(8338): 在 org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279) 06-04 11:14:08.139: W/System.err(8338): 在 org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121) 06-04 11:14:08.139: W/System.err(8338): 在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:428) 06-04 11:14:08.139: W/System.err(8338): 在 org.apache.http.impl.client.AbstractHttpClient$1.executeRequestSending(AbstractHttpClient.java:608) 06-04 11:14:08.139: W/System.err(8338): 在 org.apache.http.impl.client.naf.redirect.NafRequestExecutorWrapperRedirectionHandler.executeRequestSendingUsual(NafRequestExecutorWrapperRedirectionHandler.java:96) 06-04 11:14:08.139: W/System.err(8338): 在 org.apache.http.impl.client.naf.redirect.NafRequestExecutorWrapperRedirectionHandler.executeRequestSending(NafRequestExecutorWrapperRedirectionHandler.java:73) 06-04 11:14:08.139: W/System.err(8338): 在 org.apache.http.impl.client.naf.auth.NafHttpAuthStrategyDefault.sendFirstRequest(NafHttpAuthStrategyDefault.java:488) 06-04 11:14:08.139: W/System.err(8338): 在 org.apache.http.impl.client.naf.auth.NafHttpAuthStrategyDefault.performAuthExecutionUnsafe(NafHttpAuthStrategyDefault.java:389) 06-04 11:14:08.139: W/System.err(8338): 在 org.apache.http.impl.client.naf.auth.NafHttpAuthStrategyDefault.performAuthExecution(NafHttpAuthStrategyDefault.java:200) 06-04 11:14:08.139: W/System.err(8338): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:557) 06-04 11:14:08.139: W/System.err(8338): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:509) 06-04 11:14:08.139: W/System.err(8338): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)

【问题讨论】:

我也遇到了同样的问题,请问您发现是怎么回事并得到解决方案了吗? 不,到目前为止我还没有得到任何解决方案,我会在找到任何解决方案后立即更新帖子。如果您找到任何解决方案,请在此处发布 在我的情况下,我更新了太多 DataInputStream 对象但没有关闭它们,在这种情况下,系统可能会最终确定此资源并重新释放会导致该错误的连接。所以我通过只新建一个 DataInputStream 对象并在必要时关闭它来解决这个问题。希望这对您有所帮助。 我也遇到了一些问题.. java.net.SocketException: recvfrom failed: ETIMEDOUT... 你解决了什么步骤? 【参考方案1】:

请参阅http://www.mail-archive.com/freebsd-hackers@freebsd.org/msg23588.html:“如果 TCP 连接超时,您可以通过 keepalive 超时或协议达到最大传输重试次数来获取此信息。”它与 DNS 没有任何关系。

【讨论】:

非常感谢.. 但我可以从 Android(客户端)解决这个问题。你能解释一下你在链接中分享的解决方案吗? @SAR 我没有“分享”任何“解决方案”。该链接描述了该问题。解决办法是修复网络。 @downvoter 令人费解。我在这里什么也没做,只是引用了一个 FeeeBSD 邮件列表。

以上是关于java.net.SocketException:recvfrom 失败:ETIMEDOUT(连接超时)的主要内容,如果未能解决你的问题,请参考以下文章

是啥导致我的 java.net.SocketException:连接重置? [复制]

如何修复 java.net.SocketException:损坏的管道?

Java 1.6 HttpsURLConnection:java.net.SocketException:连接重置

java.net.SocketException:recvfrom 失败:ETIMEDOUT(连接超时)

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

如何解决 java.net.SocketException:使用 selenium 的 java 中的连接重置异常?