我有这个静态函数,它基本上连接到网页,发送后期数据并返回收到的响应(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更改了标题信息。我尝试过为用户代理使用不同的值,但这也没有用。
我希望有人可以提供帮助,为此我会感激不尽,因为这让我感到非常沮丧。
答案 0 :(得分:2)
如果TCP在超时期限之前检测到连接拒绝(即传入的RST),则表示失败。在这种情况下等待超时是没有意义的,并且预计重试只会以相同的方式再次失败。超时是针对没有响应的情况。