HttpURLConnection.connect()超时问题

永远的银灵子 2014-07-03 09:12:01
申明:
网络正常时,一切正常

前提:
手机连接上一个有强大wifi信号,却不能上网的wifi,可以用笔记本共享热点,但是这个热点不能上网来模拟

情况:
我连接的是WebService 进行登录操作 , 复写了ServiceConnection和Transport来设置超时时间,
代码中我设置了connection.setConnectTimeout(3*1000);
connection.setReadTimeout(3*1000);
但是执行时,这些设置的超时都没有效果,过几分钟才会爆出异常

07-02 10:34:38.485: W/System.err(14124): java.net.UnknownHostException: Unable to resolve host "xxx.xxxx.com": No address associated with hostname
07-02 10:34:38.525: W/System.err(14124):at java.net.InetAddress.lookupHostByName(InetAddress.java:440)
07-02 10:34:38.525: W/System.err(14124):at java.net.InetAddress.getAllByNameImpl(InetAddress.java:244)
07-02 10:34:38.525: W/System.err(14124):at java.net.InetAddress.getAllByName(InetAddress.java:219)
07-02 10:34:38.525: W/System.err(14124):at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
07-02 10:34:38.525: W/System.err(14124):at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
07-02 10:34:38.525: W/System.err(14124):at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
07-02 10:34:38.525: W/System.err(14124):at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
07-02 10:34:38.525: W/System.err(14124):at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
07-02 10:34:38.535: W/System.err(14124):at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:325)
07-02 10:34:38.535: W/System.err(14124):at libcore.net.http.HttpEngine.connect(HttpEngine.java:320)
07-02 10:34:38.535: W/System.err(14124):at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:295)
07-02 10:34:38.535: W/System.err(14124):at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:245)
07-02 10:34:38.535: W/System.err(14124):at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
07-02 10:34:38.535: W/System.err(14124):at com.myapplication.net.MServiceConnectionSE.connect(MServiceConnectionSE.java:30)
07-02 10:34:38.535: W/System.err(14124):at com.myapplication.net.MHttpTransportSE.call(MHttpTransportSE.java:95)
07-02 10:34:38.535: W/System.err(14124):at com.myapplication.net.WebServiceHelper.login(WebServiceHelper.java:93)
07-02 10:34:38.545: W/System.err(14124):at com.myapplication.LoginActivity$LogiTask.doInBackground(LoginActivity.java:429)
07-02 10:34:38.545: W/System.err(14124):at com.myapplication.LoginActivity$LogiTask.doInBackground(LoginActivity.java:1)
07-02 10:34:38.545: W/System.err(14124):at android.os.AsyncTask$2.call(AsyncTask.java:287)
07-02 10:34:38.545: W/System.err(14124):at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
07-02 10:34:38.545: W/System.err(14124):at java.util.concurrent.FutureTask.run(FutureTask.java:137)
07-02 10:34:38.545: W/System.err(14124):at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
07-02 10:34:38.555: W/System.err(14124):at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
07-02 10:34:38.555: W/System.err(14124):at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
07-02 10:34:38.565: W/System.err(14124):at java.lang.Thread.run(Thread.java:864)
07-02 10:34:38.565: W/System.err(14124): Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
07-02 10:34:38.565: W/System.err(14124):at libcore.io.Posix.getaddrinfo(Native Method)
07-02 10:34:38.565: W/System.err(14124):at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55)
07-02 10:34:38.565: W/System.err(14124):at java.net.InetAddress.lookupHostByName(InetAddress.java:420)
07-02 10:34:38.565: W/System.err(14124):... 25 more
07-02 10:34:38.565: W/System.err(14124): Caused by: libcore.io.ErrnoException: getaddrinfo failed: ETIMEDOUT (Connection timed out)
07-02 10:34:38.575: W/System.err(14124):... 28 more


Debug 下,线程被阻塞在 connection.connect(); 这句代码中

LogCat中,在阻塞的同时,时不时打出这样的log,表示看不懂
07-02 10:33:39.855: D/libc(14124): Querying server (# 1) address = 192.168.155.1 (try=2,nscount=2)
07-02 10:33:44.855: D/libc(14124): Querying server (# 2) address = 192.168.1.1 (try=2,nscount=2)
07-02 10:33:49.855: D/libc(14124): res_nsend exit-1: total retry = 3 times, errno=110,v_circuit=0
07-02 10:34:02.275: D/libc(14124): Querying server (# 1) address = 192.168.155.1 (try=2,nscount=2)
07-02 10:34:05.875: D/libc(14124): Querying server (# 1) address = 192.168.155.1 (try=2,nscount=2)
07-02 10:34:07.305: D/libc(14124): Querying server (# 2) address = 192.168.1.1 (try=2,nscount=2)
07-02 10:34:10.875: D/libc(14124): Querying server (# 2) address = 192.168.1.1 (try=2,nscount=2)
07-02 10:34:12.325: D/libc(14124): res_nsend exit-1: total retry = 3 times, errno=110,v_circuit=0
07-02 10:34:15.875: D/libc(14124): res_nsend exit-1: total retry = 3 times, errno=110,v_circuit=0
07-02 10:34:28.435: D/libc(14124): Querying server (# 1) address = 192.168.155.1 (try=2,nscount=2)
07-02 10:34:33.465: D/libc(14124): Querying server (# 2) address = 192.168.1.1 (try=2,nscount=2)
07-02 10:34:38.485: D/libc(14124): res_nsend exit-1: total retry = 3 times, errno=110,v_circuit=0


悲催的loading:
由于设置loading , 这几分钟时间loading 就一直在转着,我用浏览器打开任意网页,基本也是几分钟的loading时间,最后爆出网页连接出错

想知道的事:
我怎么可以从代码中去判断或者设置这个超时吗? 在有wifi信号却上不了网的情况下,我怎么去判断是否可以连接服务器,或者HttpURLConnection有设置这种超时的方法么? 感谢大神解答。。。。。(我又试了一次已经过去十分钟了,悲催的loading还在转着,囧
...全文
1206 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
永远的银灵子 2014-08-07
  • 打赏
  • 举报
回复
引用 1 楼 Mailbomb 的回复:
再开一个超时的线程,超过指定时间就抛弃掉本次联网,一般超时有个几十秒都很长了,还要几分钟?
怎么抛弃掉本次联网
网络咖啡 2014-07-03
  • 打赏
  • 举报
回复
再开一个超时的线程,超过指定时间就抛弃掉本次联网,一般超时有个几十秒都很长了,还要几分钟?

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧