java HttpURLConnection 设置超时没有效果

螃蟹变异了 2014-12-31 05:58:09
 
HttpURLConnection httpUrlConnection;
URL uri=new URL(url);
httpUrlConnection= (HttpURLConnection) uri.openConnection();
httpUrlConnection.setConnectTimeout(10000);
httpUrlConnection.setReadTimeout(10000);
httpUrlConnection.setRequestMethod("GET");

利用java HttpURLConnection设置http请求时间超时时间为10秒,下面是控制台打印的log

12-31 17:39:09.701 17494-17538/com.example.crab.mycameratest I/System.out﹕ [socket][5] connection lh4.googleusercontent.com/173.194.127.75:443;LocalPort=48785(10000)
12-31 17:39:19.743 17494-17538/com.example.crab.mycameratest I/System.out﹕ [socket][6] connection lh4.googleusercontent.com/173.194.127.76:443;LocalPort=52711(10000)
12-31 17:39:29.795 17494-17538/com.example.crab.mycameratest I/System.out﹕ [socket][7] connection lh4.googleusercontent.com/173.194.127.74:443;LocalPort=35041(10000)
12-31 17:39:39.888 17494-17538/com.example.crab.mycameratest I/System.out﹕ [socket][8] connection lh4.googleusercontent.com/173.194.127.75:443;LocalPort=58275(10000)
12-31 17:39:49.933 17494-17538/com.example.crab.mycameratest I/System.out﹕ [socket][9] connection lh4.googleusercontent.com/173.194.127.76:443;LocalPort=55627(10000)
12-31 17:39:59.986 17494-17538/com.example.crab.mycameratest I/System.out﹕ [socket][10] connection lh4.googleusercontent.com/173.194.127.74:443;LocalPort=50005(10000)
12-31 17:40:10.039 17494-17538/com.example.crab.mycameratest W/System.err﹕ java.net.SocketTimeoutException: failed to connect to lh4.googleusercontent.com/173.194.127.74


正常理解的话应该在socket][5] 这个请求不成功的时候就通知HttpURLConnection超时了,但是系统连续发出了
6个Socket请求(socket][5]到socket[10])后在通知HttpURLConnection说sokect超时了,这样总共算起来时间是用去
了60秒应用程序才收到超时,并不是我在应用中设置的10秒后就超时。
想问一下为什么程序不是在第一个Socket[5]就通知应用程序连接超时而是要等到Socket[10]通知应用程序超时呢?
如何设置只在第一次socket失败后就通知应用程序超时发生了?
...全文
1903 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
螃蟹变异了 2015-01-08
  • 打赏
  • 举报
回复
引用 5 楼 s_include 的回复:
[quote=引用 3 楼 crabisacoolboy 的回复:] [quote=引用 1 楼 s_include 的回复:] 超时重新提交请求??
就是不知道底层是怎么做的,它要6次后才会在应用程序抛出SocketTimeout的异常,我想在10秒后应用程序就接受到这个异常而不是等60秒后。[/quote]我和你用的同样的方式是有效的呀,你确定抛出的是 timeout的异常么,如果是的话,那就不知道是什么原因了。[/quote] 恩。我在HTC-ONE这个手机测试是这样的,它要重复尝试次,然后才抛SocketTimeout异常。
manxiSafe 2015-01-05
  • 打赏
  • 举报
回复
引用 3 楼 crabisacoolboy 的回复:
[quote=引用 1 楼 s_include 的回复:] 超时重新提交请求??
就是不知道底层是怎么做的,它要6次后才会在应用程序抛出SocketTimeout的异常,我想在10秒后应用程序就接受到这个异常而不是等60秒后。[/quote]我和你用的同样的方式是有效的呀,你确定抛出的是 timeout的异常么,如果是的话,那就不知道是什么原因了。
螃蟹变异了 2015-01-04
  • 打赏
  • 举报
回复
引用 2 楼 hchen0817 的回复:
这个设置很普通吧
我想10秒就收到SocketTimeout异常,而不是要等到60秒,怎么做?
螃蟹变异了 2015-01-04
  • 打赏
  • 举报
回复
引用 1 楼 s_include 的回复:
超时重新提交请求??
就是不知道底层是怎么做的,它要6次后才会在应用程序抛出SocketTimeout的异常,我想在10秒后应用程序就接受到这个异常而不是等60秒后。
放狼的小羊羊 2015-01-02
  • 打赏
  • 举报
回复
这个设置很普通吧
manxiSafe 2015-01-01
  • 打赏
  • 举报
回复
超时重新提交请求??

80,472

社区成员

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

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