我有此静态函数basicly使得到的网页的连接时,与它一起发送后的数据,并返回所接收的响应(JSON对象)DefaultHttpClient超时设置为10个secondes但只需要1秒超时
的我遇到的问题是无论我设置了多长时间,它只会在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;
现在我已经看到了类似这样的问题,但我找不到可以帮助我的答案。 有人说这是由于它不是线程安全的事实,但是,我不会同时进行多个调用,它都是按顺序完成的。这个问题发生在第一次尝试时,因为这个原因,不应该发生,因为没有多个连接/ httpposts,更不用说来自不同的线程。
然而它最近发生了很多,有时几天甚至几天都没有发生。
我试图寻找在AndroidHttpClient,但它似乎并不支持HttpPost,这样就不会有用或者(或我错了吗?)
的数据,两者的路径和方式是正确的,经过测试它。另外我的服务器没有问题。
有人说它可以是你的网络,但我今天测试了3个wifi网络。勉强,在我的移动提供商的互联网连接上,它不会或几乎不会发生。
我读过一个答案,它可能是因为ISP更改标题信息。我曾尝试为用户代理使用不同的值,但这也不起作用。
我希望有人可以帮助,因为我会感激,因为它真的让我感到挫败,这一直在发生。
好的,我已经搜索谷歌(没有很多命中为rst),但据我了解,org.apache.http.conn.ConnectTimeoutException也会因为某些原因无法连接时触发。第一,据我了解,它是TCP协议的连接重置位,用于重置连接。这很可能是问题所在,但为什么会发生这种情况(尤其是使用wifi),并且有没有一种已知的方法来修复它,或者抓住并妥善处理它?因为我尝试过的重试不起作用,它只会一直失败。 – Ghotirey
@Ghotirey RST是一个'积极'的失败。连接已被肯定地拒绝,无论是由主机,因为没有监听端口,或通过防火墙,因为它不会允许连接。在任何一种情况下,重试都是徒劳的。超时是针对没有收到响应的情况,这可能表明数据包丢失或连接暂时中断,所以值得重试。 – EJP