在android使用httpclient时出现“SocketException: Broken Pipe”的解决方法

发布时间:2017-6-29 9:47:08编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"在android使用httpclient时出现“SocketException: Broken Pipe”的解决方法",主要涉及到在android使用httpclient时出现“SocketException: Broken Pipe”的解决方法方面的内容,对于在android使用httpclient时出现“SocketException: Broken Pipe”的解决方法感兴趣的同学可以参考一下。

原因分析:

1.客户端与服务器的链接已经关闭(可能是客户端,也可能使服务器端,一般是客户端主动关闭),客户端继续向服务端写数据;

2.在使用httpclient的threadsafeconnectionmanager或者poolconnectionmanger的时候容易出现,原因是我们设置了连接获取数据超时的时间;

解决方法:

1.为你的httpclient添加retry handler,形如下代码:

[java] view plain copy
  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);  

2.处理SocketException:

[java] view plain copy
  1.     InputStream in = null;  
  2.     try {  
  3.         final HttpResponse response = HttpManager.execute(context, post);  
  4.         final int statusCode = response.getStatusLine().getStatusCode();  
  5.         if (statusCode == HttpStatus.SC_OK) {  
  6.             HttpEntity entity = response.getEntity();  
  7.             if (entity != null) {  
  8.                 in = entity.getContent();  
  9.                 return IOUtils.stream2String(in);  
  10.             }  
  11.         } else {  
  12.             post.abort();  
  13.             mLog.error("http code: " + response.getStatusLine().getStatusCode());  
  14.        }  
  15.     } catch (IOException ex) {  
  16.         post.abort();  
  17.     } catch (RuntimeException ex) {  
  18.         post.abort();  
  19.         throw ex;  
  20.     } finally {  
  21.         IOUtils.closeStream(in);  
  22.     }  
SocketExcption是IOException的子类,当发现有IO异常的时候主动关闭该连接,而又httpClient去重试进行连接;


http://blog.csdn.net/androidzhaoxiaogang/article/details/8153456?utm_source=tuicool&utm_medium=referral




上一篇:全球MCU市场和技术发展趋势
下一篇:nginx:TIME_WAIT过多或者CLOSE_WAIT过多的状态

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款