SocketTimeoutException和ConnectTimeoutException的区别




前几天服务器端的产品经理跑来问我是否有做请求超时和响应超时的处理。我一脸迷茫,直接就说:我做了开发这么久,从不知道什么是请求超时什么是响应超时。

后来我静下来仔细想想,确实应该有请求超时和响应超时这两个概念,不然会出很多问题的。
然后花了一些时间仔细查了下资料。确实是如此。
 
ConnectException : 指的是服务器请求超时
SocketTimeoutException:指的是服务器响应超时
可以在代码里设置
 //请求超时
        httpclient.getParams().setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,reqTimeout);
        //响应超时
        httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, resTimeout);
 
大家如果以后做安全级别高的项目可能会碰到我这样的问题。我说明下。
当一笔交易,如果请求失败,那可以允许用户再次提交。
如果是响应失败,那就说明用户提交成功了,应该防止用户再次提交 

方法实在是很简单, 为你的httpclient添加一个retry handler就ok了。代码如下:

  1.     HttpRequestRetryHandler retryHandler = new HttpRequestRetryHandler() {  
  2.   
  3.     @Override  
  4.     public boolean retryRequest(IOException arg0, int arg1, HttpContext arg2) {  
  5.         // retry a max of 5 times  
  6.         if (arg1 >= 3) {  
  7.             return false;  
  8.         }  
  9.         if (arg0 instanceof ch.boye.httpclientandroidlib.NoHttpResponseException) {  
  10.             return true;  
  11.         } else if (arg0 instanceof ch.boye.httpclientandroidlib.client.ClientProtocolException) {  
  12.             return true;  
  13.         }  
  14.         return false;  
  15.     }  
  16. };  
  17. sHttpClient.setHttpRequestRetryHandler(retryHandler);  
            HttpRequestRetryHandler retryHandler = new HttpRequestRetryHandler() {

            @Override
            public boolean retryRequest(IOException arg0, int arg1, HttpContext arg2) {
                // retry a max of 5 times
                if (arg1 >= 3) {
                    return false;
                }
                if (arg0 instanceof ch.boye.httpclientandroidlib.NoHttpResponseException) {
                    return true;
                } else if (arg0 instanceof ch.boye.httpclientandroidlib.client.ClientProtocolException) {
                    return true;
                }
                return false;
            }
        };
        sHttpClient.setHttpRequestRetryHandler(retryHandler);

如果上面的代码不好使的话,可以试着添加:


HttpProtocolParams.setUseExpectContinue(params, false);  


http://www.cnblogs.com/codingmyworld/archive/2011/08/17/2141706.html



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值