当前位置: 代码迷 >> Android >> Android URLConnection read()异常-对等重置
  详细解决方案

Android URLConnection read()异常-对等重置

热度:50   发布时间:2023-08-04 12:22:40.0

我正在编写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)。

  相关解决方案