我正在编写Android应用程序以从网站下载特定文件(目前为20M字节)以进行测试。我使用 URLConnection 和 BufferedInputStream
下载几个兆字节后,我收到 IOException连接重置同行
inputStream.read()暂停约130秒,然后引发异常
从几次尝试中,我注意到下载的字节是11,272,192或11,010,048,知道该文件可以从PC正常下载。
以下是我使用的代码段:
@Override
protected String doInBackground(String... f_url) {
try {
URL url = new URL(f_url[0]);
HttpURLConnection conection = (HttpURLConnection) url.openConnection();
conection.setConnectTimeout(5000);
conection.setReadTimeout(5000);
conection.setDoOutput(false);
conection.connect();
// input stream to read file - with 8k buffer
InputStream input = new BufferedInputStream(url.openStream(), 8192);
...
do {
byte data[] = new byte[1024];;
if (((count = input.read(data)) == -1)) {
break;
}
sum+=count;
...
} while (true);
input.close();
conection.disconnect();
} catch (Exception e) {
...
}
return null;
}
我想知道导致这个问题的原因,以及如何避免这个问题 我读了多个(类似主题)问题,但没有帮助。他们都同意没有错误的代码和它是网络(或主机)问题。但我需要知道为什么下载失败以及如何克服它 知道
答案 0 :(得分:0)
当服务器通过发送RST数据包关闭连接时,会发生对等连接重置错误。服务器可以执行此操作可能有很多原因-您可能使用了过多的资源,因此可能会关闭连接,可能有一些原因服务器配置错误等。我也遇到了同样的错误,所以我将缓冲区大小从1024更改为512,并且它起作用了。我认为它起作用是因为这减少了服务器必须使用的资源。也将input.read(data)更改为input.read(data,0,512)。