DefaultHttpClient超时设置为10秒,但超时只需1秒

时间:2012-05-12 23:12:16

标签: java android json http

我有这个静态函数,它基本上连接到网页,发送后期数据并返回收到的响应(JSON对象)

我遇到的问题是,无论我设置什么超时,它只会在尝试1秒时超时,超时为6秒,不应该发生。

public static String makeRequest(String path, String info) throws Exception 
{
  HttpParams httpParameters = new BasicHttpParams();
  int timeoutConnection = 6000;
  HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
  int timeoutSocket = 6000;
  HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

  DefaultHttpClient httpclient = new DefaultHttpClient(httpParameters);
  HttpPost httpost = new HttpPost(path);
  StringEntity jsonobj = new StringEntity(info);
  httpost.setEntity(jsonobj);
  httpost.setHeader("Accept", "application/json");
  httpost.setHeader("Content-type", "application/json");
  ResponseHandler responseHandler = new BasicResponseHandler();

  String response = httpclient.execute(httpost, responseHandler);
  return response;

现在我已经看到了一些像这样的问题,但我找不到可以帮助我的答案。 有人说这是因为它不是线程安全的,但是,我不会同时进行多次调用,所有这些都是按顺序完成的。问题evens发生在第一次尝试时,由于这个原因不应该发生,因为还没有多个连接/ httpposts,更不用说来自不同的线程了。

然而,最近确实发生了很多事情,有时它几天没有发生,或者几天都没发生。

我试过看AndroidHttpClient,但它似乎不支持HttpPost,所以这也没用(或者我错了吗?)

路径和信息的数据都是正确的,经过测试。我的服务器也没有问题。

有人说它可能是你的网络,但我今天在3个wifi网络上测试它。扼杀,在我的移动服务提供商的互联网连接上,它没有或几乎不会发生。

我在一个答案中读到,可能是因为ISP更改了标题信息。我尝试过为用户代理使用不同的值,但这也没有用。

我希望有人可以提供帮助,为此我会感激不尽,因为这让我感到非常沮丧。

1 个答案:

答案 0 :(得分:2)

如果TCP在超时期限之前检测到连接拒绝(即传入的RST),则表示失败。在这种情况下等待超时是没有意义的,并且预计重试只会以相同的方式再次失败。超时是针对没有响应的情况。