[英]Android URLConnection read() Exception-Connection Reset by Peer
我正在編寫Android應用程序,以從網站下載特定文件(當前為20M字節)以進行測試。 我使用URLConnection和BufferedInputStream 。
下載幾個兆字節后,我收到IOException由Peer重置連接 。
inputStream.read()暫停了約130秒,然后引發了異常。
通過幾次嘗試,我注意到知道可以從PC正常下載文件,所以下載的字節為11,272,192或11,010,048。
以下是我使用的代碼段:
@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;
}
我想知道導致此問題的原因以及如何避免它。
我讀了多個(相似的主題)問題,但沒有一個有幫助。 他們都同意代碼沒有錯, 這是網絡(或主機)問題 。 但是我需要知道為什么下載失敗以及如何克服它
知道
當服務器通過發送RST數據包關閉連接時,會發生由對等錯誤導致的連接重置。服務器可以執行此操作可能有很多原因-您可能使用了過多的資源,因此可能會關閉連接,因此可能會出現錯誤。服務器配置等。我也遇到了同樣的錯誤,所以我將緩沖區大小從1024更改為512,並且它起作用了。我認為它起作用是因為這減少了服務器必須使用的資源。也將input.read(data)更改為input.read (數據,0512)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.