在給服務器上傳文件的時候,報了這個錯。java.net.SocketException: sendto failed: ECONNRESET (Connection reset by peer)。
有時候也報這個錯:java.net.SocketException: sendto failed: EPIPE (Broken pipe) 。
對這兩個錯是陌生的很,網上一搜,發現有好多同樣遇到的,回覆給出解決方法的很少,有解決方法的也各不相同。
總結一下網上給出的原因(除開網絡不好):
1、服務器限制了文件上傳大小或者連接超時啊(我讓後臺加大之後還是不行,pass)
2、Range頭設置不對的 (也是不行,http請求頭Range介紹:https://www.cnblogs.com/1995hxt/p/5692050.html)
3、這個也不行
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() .permitAll().build();
StrictMode.setThreadPolicy(policy);
4、System.setProperty("http.keepAlive", "false"); (這個沒試過)
5、成功解決:http請求使用的是長鏈接,改成短鏈接即可。通過修改請求頭:Connection = close。
(異常產生原因是:
客戶端上傳圖片的http請求使用了長連接,但web端的長連接響應數量有限制,所以產生的現象是系統運行一段時間後,長連接的http請求報異常。http1.1協議默認是Connection=Keep-Alive,也就是長連接)
解決參考自:
https://blog.csdn.net/asc2046/article/details/53180453