• Android http超时选项的测试

  • Android通过HttpConnectionParams类为http参数设置提供了两个超时的设置选项,分别是setSoTimeout和setConnectionTimeout。初看一眼Android官方给的文档对这个两个方法的具体含义有一种不理解不够清楚的感觉,所以决定通过测试的方式来看看到底在什么情况下这两个参数会起作用。

    经过测试可以发现,setConnectionTimeout设置了建立连接的超时,这是针对TCP的三次握手而言的,如果在指定时间内无法和http服务器建立TCP连接,就会抛出ConnectionTimeoutException。setSoTimeout则设置的是TCP保活时间,在建立了连接之后的指定时间内没有收到服务器发来的相应的数据包,则抛出SocketTimeoutException.

    一、测试代码

    复制代码

    private String urlString;

    private int timeout1,timeout2;

    MyAsyncTask(String url,int timeout1,int timeout2){

    urlString=url;

    this.timeout1=timeout1;

    this.timeout2=timeout2;

    }

    @Override

    protected String doInBackground(String... params) {

    httpget(urlString,timeout1,timeout2);

    return "test";

    }

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    new MyAsyncTask("http://www.xiaonei.com:1234",3000,5000).execute("start");

    new MyAsyncTask("http://www.baidu.com",3000,5000).execute("start");

    }

    private void httpget(String Url,int timeout1,int timeout2) {

    Log.v("httpget", "httpget start timeout1 is "+timeout1+"timeout2 is "+timeout2);

    int timeoutConnection = timeout1; // until connection is established

    int timeoutSocket = timeout2; // timeout for waiting for data

    HttpParams httpParameters = new BasicHttpParams();

    HttpConnectionParams.setConnectionTimeout(httpParameters,

    timeoutConnection);

    HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

    DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);

    HttpGet postRequest = new HttpGet(Url);

    HttpResponse httpResp = null;

    try {

    httpResp = httpClient.execute(postRequest);

    } catch (ClientProtocolException e) {

    Log.v("Main", "clinet protocol exception");

    return;

    }catch (SocketTimeoutException e) {

    // TODO: handle exception

    Log.v("Main", "socket timeout"+timeout2);

    return;

    }catch (ConnectTimeoutException e) {

    // TODO: handle exception

    Log.v("Main", "connection timeout"+timeout1);

    return;

    }

    catch (IOException e) {

    Log.v("Main", "io exception");

    return;

    }

    }

更多相关文章

  1. Android操作HTTP实现与服务器通信
  2. Android应用程序与SurfaceFlinger服务的连接过程分析
  3. android 自动化测试工具 Monkey
  4. Andriod自动化测试原理基础
  5. android 利用adb连接手机调试程序
  6. Android(安卓)spinner控件的实现
  7. Android入门(4) 布局、JUnit、日志与数据存储访问方式
  8. Android蓝牙开发
  9. app测试教程:ios与android的区别

随机推荐

  1. JS判断客户端是否是iOS或者Android
  2. Android(安卓)NDK学习(1) 简介
  3. EditText 所有属性
  4. 】Android横竖屏总结
  5. Android(安卓)8.1 zygote创建新应用进程
  6. android之layout_toLeftOf和layout_toRig
  7. Android(安卓)Button字母自动全部大写的
  8. 相关约束参数的含义
  9. Android(安卓)2.2.2到Android(安卓)4.2.2
  10. Hive中的case when 的写法