2
回答
HttpClient解析数据获取丢失
注册华为云得mate10,2.9折抢先购!>>>   

目前我有个httpClient解析url的代码,大部分情况下都正常,但是偶尔会出现下面的报错org.apache.http.ConnectionClosedException: Premature end of Content-Length delimited message body (expected: 35499; received: 18409

这个我大概知道是因为服务端发送的是35499字节内容,但是实际客户端只接收到18409字节内容,没接收完连接就关闭了,这种情况一般是什么原因引起的,有人知道么,或者是我需要在httpClient解析的时候加上什么属性设置?我有关闭连接的操作,是否可以判断接收完成再关闭连接的设置?

主要代码如下

举报
594zzb
发帖于1年前 2回/548阅
共有2个答案 最后回答: 1年前

是有段代码设置了请求超时时间,意思是下面的5000设置的大点么,但是我好像是请求到了,数据已经在传输了,只是io太快关了而已,如果是请求超时过短,是不是应该是传输数据的过程都不会有才对?

public static HttpClient getHttpClient() {

HttpParams params = new BasicHttpParams();
params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION,HttpVersion.HTTP_1_1);

int CONNECTION_TIMEOUT=5000;
params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, CONNECTION_TIMEOUT); // 3000ms
return new DefaultHttpClient(cm, params);

--- 共有 3 条评论 ---
BoXuan回复 @594zzb : 不用客气,对你有帮助就行 1年前 回复
594zzb回复 @BoXuan : 嗯,有可能,谢谢了哈 1年前 回复
BoXuan打个比方,服务器处理耗时需要2秒,而客户端请求超时只有1.5秒,客户端在过了1.5后没有收到服务器返回数据就会判定超时关闭此次请求连接,不过这种情况客户端会报请求超时的异常。你那种情况我也说不准,可能是服务器异常主动关闭了这个请求,比如你服务器对数据发送后是否调用了数据输出流的close方法 1年前 回复
顶部