我使用的是org.apache.http
,代码如下:
DefaultHttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
HttpResponse resp = client.execute(get);
HttpEntity entity = resp.getEntity();
InputStream input = entity.getContent();
...
//Read the bytes from input stream
这是我用来通过Http下载文件的代码,我想取消连接(可能是用户选择的)什么是优雅的关闭连接的方式。我找到了两种方法,都可以取消下载。
导致IOException.
关闭输入,()导致HttpGet对象,get.abort()导致IOException.
我有尝试捕获,所以没有错误,但没有抛出异常,有没有方法取消或中止连接?
怎样做才是正确的呢?
发布于 2012-09-13 15:06:07
正确的方法是将FIN
值发送到服务器端。
然而,在android中,您没有参与这一级别的选项,所以您可以使用C自己实现,或者使用您在问题中提到的方法之一。
发布于 2012-09-16 19:41:46
在我看来,使用HttpUriRequest#about
是正确的方式。这将导致底层连接立即终止,并将其从连接池中逐出。较新版本的HttpClient (4.2和更新版本)会截获由用户过早终止请求引起的SocketExceptions。问题是,谷歌发布了一个基于非常过时的版本(pre-beta1)的HttpClient分支。如果您不能或不愿意使用较新版本的HttpClient,那么您唯一的选择就是在代码中捕获并丢弃SocketException。
发布于 2012-09-13 14:48:48
使用此
client.getConnectionManager().closeExpiredConnections();
client.getConnectionManager().shutdown();
现在您可以决定在代码中将这两行代码写在哪里。它将使用您创建的DefaultHttpClient对象关闭连接。
如果这对你有帮助,请告诉我。
https://stackoverflow.com/questions/7291854
复制相似问题