簡體   English   中英

Android URLConnection read()異常-對等重置

[英]Android URLConnection read() Exception-Connection Reset by Peer

我正在編寫Android應用程序,以從網站下載特定文件(當前為20M字節)以進行測試。 我使用URLConnectionBufferedInputStream
下載幾個兆字節后,我收到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM