【问题标题】:java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer) is occuring some timesjava.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer) 发生了几次
【发布时间】:2013-05-05 19:35:23
【问题描述】:

我为这个很少发生的异常搜索了很多,但是我没有找到任何可以解决我的问题的相关答案, 我正在使用 HttpURLConnection 从 url 获取作为 xml 的响应,它工作正常但有时我得到这个异常:
java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer), 我使用了以下代码,url1 是我的 url,它提供了一个 xml。

url=new URL(url1);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoInput(true);  
urlConnection.connect();
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String result, line = reader.readLine();
result = line;
           while((line=reader.readLine())!=null)
                       {
               result+=line;
           }

           System.out.println("Result: "+result);

【问题讨论】:

标签: android serversocket


【解决方案1】:

打开您正在使用的浏览器并尝试将 urland 复制到您的 MOBILE DEVICE 的浏览器中,如果您仍然遇到相同的错误或可能连接被拒绝,这意味着您的 MOBILE 和您运行服务器的 PC 没有打开同一个计划。

【讨论】:

  • 是的,我做了这件事,但它正在移动浏览器中打开,正如我解释的那样,它在 20 次测试中发生了 5 次。
  • 不,它没有。除非存在连接,否则无法重置连接,除非对等方之间存在网络路径,否则无法建立连接。
【解决方案2】:

我在尝试与我的服务器交谈时遇到了类似的问题。我仍然不确定发生了什么,但我在搜索中找到了this 以解决问题:

好的,答案是服务器的错 - 它必须关闭 每次请求后连接。可能是android保留了一个池 的连接并使用旧的或类似的东西。反正 , 现在可以了。

看完这篇文章,我杀死了我服务器上运行的apache实例,让手机看到连接被拒绝,然后重启apache。之后,这个问题就消失了。希望这会有所帮助!

【讨论】:

    【解决方案3】:

    试试把 urlConnection.setRequestProperty("connection", "close");在连接之前。这将禁用默认启用的 keep-alive 属性

    【讨论】:

    • 如何为 HttpClient 或 HttpPost 设置此项?
    【解决方案4】:

    在我的情况下,我从 http 更改为 https 并且一切都变得正常

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-15
      • 2013-10-26
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      • 2020-06-06
      • 2017-09-24
      • 2019-02-02
      相关资源
      最近更新 更多