我有此靜態函數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