java.net.SocketException:连接重置OKHTTP

时间:2017-08-07 23:05:27

标签: android okhttp

我正在使用okhttp将文件上传到我的服务器并在google docs viewer上加载该文件以供我的用户预览。但是,由于我无法在服务器上找到该文件,因此上载失败。引发的异常给出了以下stacktrace:

 Cannot setInForeground() - never saw a connection for the pid: 22551
08-08 04:23:37.208 22551-22605/  W/System.err: java.net.SocketException: Connection reset
08-08 04:23:37.330 22551-22551/  W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 22551
08-08 04:23:37.331 22551-22551/  W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 22551
08-08 04:23:39.213 22551-22551/ W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 22551
08-08 04:23:40.672 22551-22551/  W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 22551
08-08 04:23:41.203 22551-22551/  W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 22551
08-08 04:23:52.103 2751-3347/? D/WifiQualifiedNetworkSelector:: Current connection state (true,false,false)
08-08 04:24:04.811 4124-4124/? W/GmsClientEvents: unregisterConnectionCallbacks(): listener agqt@1598588 not found

PORT 80也是开放的。但是,有时上传会一直失败。大多数时候它工作正常。这是服务器或客户端的问题吗?如果客户端是它如何在某些时候工作的原因。超时错误是导致问题的原因吗?我检查过大或小的文件,但我不知道导致问题的原因。

以下是我上传文件的代码:

 try {
        File f  = new File(selectedFilePath);

        String file_path = f.getAbsolutePath();
        OkHttpClient client = new OkHttpClient();

        RequestBody file_body = RequestBody.create(MediaType.parse(content_type),f);
        Log.e("msh", content_type);
        RequestBody request_body = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("type",content_type)
                .addFormDataPart("uploaded_file",file_path.substring(file_path.lastIndexOf("/")+1), file_body)
                .build();

        Request request = new Request.Builder()
                .url("http://fakeurl.com/retrofit_example/save_file.php?neran="+neran)
                .post(request_body)
                .build();



            response = client.newCall(request).execute(); //exception is here



        } catch (UnknownHostException e) {
            e.printStackTrace();
            /*uploadFile(selectedFilePath);*/
            upsuccess = false;
        } catch (IOException e) {
            e.printStackTrace();
            upsuccess = false;
        }  catch (NullPointerException e) {
            e.printStackTrace();
            /*uploadFile(selectedFilePath);*/
            upsuccess = false;
        }

        if(response!=null) {
            if (response.isSuccessful()) {
                upsuccess = true;
            }
            response.body().close();
        }

我已尝试在stackoverflow上的其他问题中讨论的所有内容,但错误仍然存​​在。尽管使用okhttp上传失败,但其他方法和库也存在上述问题。

其他答案也有人建议:

  1. 增加上传文件大小:我的文件只有55 kb,限制为512 MB
  2. PHP日志没有显示上传失败的任何内容
  3. 更新:我不完全确定,但这个问题通常发生在WIFI上,有时候不会出现在移动互联网上。此外,我注意到有时关闭wifi然后打开似乎解决问题,但由于各种原因,我不想以编程方式在我的应用程序上执行此操作因为我将需要额外的权限。任何人都可以告诉我问题的原因是什么?

1 个答案:

答案 0 :(得分:0)

我之前遇到过这样的问题,当我使用okhttp将大文件上传到服务器时,会发生异常“sendto failed:ECONNRESET(连接由同行重置)”。这让我困扰了好几天,最后我找到了答案。

nginx服务器的配置限制了上传文件的大小。 找到文件“nginx.conf”,将“client_max_body_size”修改为512M或更大,然后一切正常。

抱歉我的英语很差,希望这对你有所帮助。