在安卓系统中取消 Http 连接

2022-09-03 07:42:40

我正在使用,我有这个代码: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下载文件的代码,我想取消连接(可能是用户选择的)关闭连接的优雅方式是什么。我找到了2种方法,两者都取消了下载。

  1. close inputsteram, input.close();这会导致IOException。
  2. 中止 HttpGet 对象,get.abort() 导致 SocketException。

我已经尝试了 catch,所以没有错误,但是没有抛出异常,有没有办法取消或中止连接?

正确的方法是什么?


答案 1

正确的方法是将 FIN 值发送到服务器端。

在Android中,您没有选择参与此级别,因此您可以使用C自行实现,或者使用您在问题中提到的方法之一。


答案 2

在我看来,使用是正确的方式。这将导致基础连接立即终止并将其从连接池中逐出。较新版本的 HttpClient(4.2 及更高版本)会拦截由用户过早终止请求而导致的 SocketExceptions。问题在于,Google基于一个极其过时的版本(pre-beta1)发布了一个HttpClient的分支。如果您不能或不愿意使用较新版本的 HttpClient,您唯一的选择就是在代码中捕获并丢弃 SocketException。HttpUriRequest#about


推荐