HttpProtocolParams.setUseExpectContinue(httpClient.getParams(),false);
不适合我.
我使用HttpRequestRetryHandler来避免这个问题,它可以工作,但我不认为这是一个完美的方法,因为tcpdump在服务器端转储的网络数据包.
我发现当发生NoHttpResponseException时,在连接到服务器而不是在此请求之前使用的旧端口时使用新端口(HttpClient不重用旧连接).但是当从客户端连接到服务器端的新端口时,我没有找到任何tcp 3次握手数据包.但是基于tcp理论,握手是建立新连接时必须采取的步骤.
我不知道它是否是android的错误(我使用android 2.3进行测试),有没有人有想法?提前致谢.
解决方法
>确保您获得最新版本 – http://hc.apache.org/downloads.cgi
>将httpcomponents-client-4.2.1-bin解压缩到工作区中的一个方便目录
>创建一个名为“Apache HttpClient 4.2.1”的用户库,并链接到.jar文件中(如果愿意,也可以附加源文档),并在库的“订购和导出”页面上选择导出.
>将库链接到您的项目.
另外,请检查连接参数设置.建议根据apache文档打开UseExpectContinue以获得性能(请参阅http://hc.apache.org/httpclient-3.x/performance.html).如果您使用的HTTP_1_0或更低,可能会导致问题.
这些设置适用于我(请注意使用HTTP_1_1,您的超时可能与我的不同):
HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params,HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params,HTTP.DEFAULT_CONTENT_CHARSET); HttpProtocolParams.setUseExpectContinue(params,true); httpconnectionParams.setStaleCheckingEnabled(params,false); httpconnectionParams.setConnectionTimeout(params,13000); httpconnectionParams.setSoTimeout(params,30000); httpconnectionParams.setSocketBufferSize(params,8192);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。