【问题标题】:Socket timeout when making HTTPGet requests using DefaultHTTPClient使用 DefaultHTTPClient 发出 HTTPGet 请求时的套接字超时
【发布时间】:2011-03-10 00:54:31
【问题描述】:

在将 HTTP 请求从 Android 应用程序发送到外部服务器时,重复使用 DefaultHTTPClient 的优点和缺点是什么?我尝试在发出周期性HTTPGet 请求时重用DefaultHTTPClient,但我得到随机套接字超时(特别是在使用3G 时)。

我的代码如下:

public class MyHTTPSender {
  private DefaultHTTPClient mClient;

  public MyHTTPSender() {
    mClient = new DefaultHTTPClient();
  }

  public void send(String httpAddress) {
HttpGet get = new HttpGet(this.surrogateURL);
    HttpResponse response = null;
try {
      response = httpClient.execute(get);
      // ... consume entity if OK          
    } catch (Exception e) {
    } finally {
        if (response != null) {
           // do some sanity checks to ensure Entity is there!
           response.getEntity().consumeContent();
        }
    }
  }
}

我看不出我所做的有什么问题。我有一个单独的处理程序来发出 HTTPPost 请求,并且效果很好(使用不同的 DefaultHTTPClient 对象)。

有什么建议吗?

【问题讨论】:

  • 我开始看到相同的行为,从 Android 2.3.3 开始。我的应用程序以前运行良好,但现在升级到 2.3.3 后,有时会出现 java.net.SocketException: Connection timed out。我有 20 秒的套接字超时和连接超时。

标签: android


【解决方案1】:

您处于什么 API 级别?

如果您使用 8 或更高版本,您可能会考虑尝试 AndroidHttpClient,它可能指定了更好的套接字超时。

否则,您可能会检查您是如何创建 DefaultHttpClient 并尝试指定更长的超时时间。

【讨论】:

  • 我使用的是 API 级别 7。我可以使用类似的方法手动设置超时值:httpget.getParams().setParameter("http.socket.timeout", new Integer(5000));但这仍然不能解释为什么首先会发生超时。在服务器上记录显示从未收到 GET 请求。但是,当我不久之后发送一个 POST 请求时,它就被服务器成功接收了!​​span>
猜你喜欢
  • 2018-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 2013-04-11
  • 2016-01-23
相关资源
最近更新 更多