0

我看到一些奇怪的行为/错误似乎只在从 wi-fi 切换到蜂窝网络时发生。其中之一是以下例外:

java.net.SocketTimeoutException:在 org.apache.harmony.luni.platform.OSNetworkSystem.connectStreamWithTimeoutSocket(OSNetworkSystem.java:131) 的 org.apache.harmony.luni.platform.OSNetworkSystem.connectStreamWithTimeoutSocketImpl(Native Method) 处未连接套接字org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:247) at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:535) at java.net.Socket.connect( Socket.java:1071) 在 org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.(HttpConnection.java:62) 在 org.apache.harmony.luni.internal.net.www.protocol .http.HttpConnectionManager$ConnectionPool.getHttpConnection(HttpConnectionManager.java:145) 在 org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionManager.getConnection(HttpConnectionManager.java:67) 在 org.apache.harmony.luni.internal.net.www.protocol 的 org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.getHTTPConnection(HttpURLConnection.java:821)。 http.HttpURLConnection.connect(HttpURLConnection.java:807) 在 org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1150) 在 com.nexage.android.reports2。 AdReport2$ReportTask.run(AdReport2.java:492) 在 java.util.Timer$TimerImpl.run(Timer.java:290)getOutputStream(HttpURLConnection.java:1150) at com.nexage.android.reports2.AdReport2$ReportTask.run(AdReport2.java:492) at java.util.Timer$TimerImpl.run(Timer.java:290)getOutputStream(HttpURLConnection.java:1150) at com.nexage.android.reports2.AdReport2$ReportTask.run(AdReport2.java:492) at java.util.Timer$TimerImpl.run(Timer.java:290)

这可能是由以某种方式“卡住”的持久连接引起的吗?如果是这样,有没有办法重置连接?我知道 HTTP 应该是无状态的,而且我不知道有任何方法可以“重置”HTTP 连接,但我认为操作系统级别可能存在一些错误,即使连接是打开的,它也试图保持打开状态破碎的。

谢谢,我一直在尝试解决这个问题一个星期,但还没有任何线索!

4

1 回答 1

0

您是否检测到网络交换机并重新建立 HTTP 会话?当您切换网络类型时,您的 HTTP/TCP 连接将关闭,导致类似于您再次尝试使用它时看到的错误。

顺便说一句,持久的 HTTP 连接并不意味着当您断开网络连接时它将是持久的。这意味着在大多数情况下,您可以通过同一连接发送多个请求。

于 2012-05-24T19:28:24.400 回答