【问题标题】:HttpClient execute keeps giving ConnectTimeoutExceptionHttpClient 执行不断给出 ConnectTimeoutException
【发布时间】:2011-10-06 00:26:15
【问题描述】:

我的应用程序中有一个非常大的错误,我似乎真的无法解决。每当我通过以下代码拨打休息电话时:

  HttpGet request = new HttpGet(url + getParams());

  HttpParams httpParameters = new BasicHttpParams();
  HttpConnectionParams.setConnectionTimeout(httpParameters, 5000);
  HttpConnectionParams.setSoTimeout(httpParameters, 10000);

  DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);

  httpClient.execute(request);

我在 DDMS 中得到错误:

07-15 11:22:47.448: WARN/System.err(973): org.apache.http.conn.ConnectTimeoutException: Connect to (some ip-address) timed out

但有时代码运行良好,我收到了应有的数据。我还通过计算机上的普通网络浏览器测试了其余服务器调用,它总是在 100 毫秒内返回我的数据。那么我做错了什么?我还在另一台设备上对其进行了测试,但这给了我同样的问题。如果有人能解决我的问题,我会很高兴:)

【问题讨论】:

  • 这可能与网络速度慢有关(您使用的是 Wi-Fi 还是 3G?)。尝试在模拟器中运行它。您可能需要增加连接超时并设置重试机制。
  • 是的,但是使用我的其他应用程序,我可以一直获取请求的数据。我正在使用其中一部手机使用 WiFi,但那部手机也给了我例外。而且据我所知,httpclient有自动重试机制?
  • 将超时时间增加到 20-30 秒。有时,线路可能很忙,因此超时。
  • 好吧,我把超时时间增加到 20 秒:HttpConnectionParams.setConnectionTimeout(httpParameters, 20000); HttpConnectionParams.setSoTimeout(httpParameters, 20000);但是我仍然有同样的情况,数据很少被加载,而且大部分都没有收到任何东西
  • 嘿 Martijn538 你找到解决超时问题的方法了吗?

标签: android rest httpclient http-get connection-timeout


【解决方案1】:

检查您是否能够使用您的开发机器进行连接,同时检查加载时间。您的超时很有可能太小了。

【讨论】:

  • 我将超时更改为 20 秒,仍然是同样的问题。我还能尝试什么?以前没有人遇到过这个问题吗?
  • 你能访问 URL 查看你的开发机器吗?
  • 是的,但问题是:有时它加载良好且及时,有时它似乎根本没有加载!
【解决方案2】:

我有同样的问题。

尝试对您的请求使用直接 IP。我注意到 Android DNS 查找有时表现得很奇怪。我搜索并找到了这个:http://mailinglists.945824.n3.nabble.com/Android-and-reverse-DNS-lookup-issues-td3011461.html

不知道是否相关,我仍在尝试寻找解决方法。也许这里有人可以看看并弄清楚。

【讨论】:

  • 在我更改主机文件后遇到了完全相同的问题。重启手机解决了这个问题。
【解决方案3】:

问题是DefaultHttpClient。你是异步使用的吗?由于DefaultHttpClient 不是线程安全的,在异步环境中使用它可能会导致问题。在我的活动同时启动多个 Http 连接并最终将其更改为使用 HttpURLConnection 之前,我遇到过这个问题。可以参考本站:http://www.vogella.de/articles/AndroidNetworking/article.html

【讨论】:

    【解决方案4】:

    有类似的问题,只能在尝试同时使用多个设备连接时重现,解决方案是:

    实例重启解决了连接问题。 (或者只需要重启网络服务)

    (c) 我的服务器/实例管理员

    此外,有些人也遇到过类似的问题,并且其他一些解决方案对他们有用,例如:

    1. 禁用 tcp_timestamp
    2. 禁用 tcp_tw_reuse 和 tcp_tw_recycle
    3. 在 Android 清单中启用了 vm 保存模式:android:vmSafeMode="true"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2015-10-18
      相关资源
      最近更新 更多