【发布时间】: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... 你解决了什么步骤?