zoukankan      html  css  js  c++  java
  • HttpURLConnection连接超时问题

    1、问题描述

    这几天测试重构后的下载框架,发现在下载过程中如果网络中断或网络较差,个别应用的下载就会阻塞卡住,一直卡在 “正在下载 xx%”。
     

    2、问题排查和定位

    思考:网络差不应该报网络异常的错误或者直接抛timeout异常吗?所以马上去检查Http请求的地方:发现在DownloadThread中使用HttpURLConnection进行网络请求时只是设置了connectTimeout,这样在建立连接的时候如果网络中断,那么超时以后就会报出错误,这里是没有问题的。会不会是还少设置了其他参数的原因呢?
     
    于是赶紧去查阅资料:
    ConnectTimeout只有在网络正常的情况下才有效,而当网络不正常时,ReadTimeout才真正的起作用,即IdIOHandlerStack 里的 WaitFor 是受ReadTimeout限制的,因此,这2个属性应该结合实用。
     
    connect timeout 是建立连接的超时时间;
    read timeout,是传递数据的超时时间。
     
    正确的方法应当是调用HttpURLConnection的时候同时设置这两个超时时间。
    一看代码,果然漏了setReadTimeout。。。。。OMG 。。。
     

    3、解决方案

    同时设置这两个超时时间:
    HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();
    urlCon.setConnectTimeout(20*1000);
    urlCon.setReadTimeout(20*1000); 
     
    参考连接:https://blog.csdn.net/jackson_wen/article/details/51923514
  • 相关阅读:
    icmp_ping学习笔记
    学习笔记
    解决Safari高版本浏览器中默认禁用第三方COOKIE(含demo)
    基础算法之插入排序Insertion Sort
    基础算法之选择排序Selection Sort
    基础算法之快速排序Quick Sort
    基础算法之冒泡排序Bubble Sort
    for语句嵌套循坏性能的剖析
    2014——>2015,我的薪资依然是4.5
    C# 反射浅析
  • 原文地址:https://www.cnblogs.com/xiohao/p/8854113.html
Copyright © 2011-2022 走看看