我與Android 4.1.2和4.2.2存在間歇性連接問題,HTTP堆棧似乎完全超時(DNS查找和TCP/IP仍然有效,我可以檢查使用ADB SHELL )。Android HttpURLConnection連接超時
這些連接正在通過GPRS進行故障切換,而不是通過WiFi。
當使用SHELL檢查netstat時,我可以看到連接正在等待SYN_SENT,當檢查服務器上的防火牆時,我們可以看到它已響應SYN請求,但沒有收到任何設備。在此停電期間,似乎所有HTTP流量都在設備上失敗。即使設備報告了網絡,並且您可以撥打/接聽電話,Exchange也不能再使用任何常用瀏覽器(Firefox,Chrome)請求任何頁面。
我的應用程序通過HTTP和HTTPS進行通信,並且在停電期間都會失敗。 POST和GET我的JSON Web服務請求掛起,並拋出:
java.net.SocketTimeoutException: failed to connect to mywebaddress.com/1.1.1.1 (port 443) after 10000ms
如果它有連接,因爲它是尊重我與HttpURLConnection的下方設置超時麻煩這是預期。
我使用的代碼如下,位於一個Async類中。這通常包含在連接循環中,具體取決於消息的重要性。這可能會被調用3次,每次通話間隔15秒。
HttpURLConnection conn = null;
BufferedReader reader = null;
try
{
// Uses ConnectivityManager.getActiveNetworkInfo()
// Returns true, the Android OS reports a connection
if(myApp.hasNetworkConnection)
{
conn = (HttpURLConnection)endpoint.openConnection();
conn.setConnectTimeout(10000);
conn.setReadTimeout(20000);
reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuffer strResults = new StringBuffer();
String strLine = "";
while ((strLine = reader.readLine()) != null)
{
strResults.append(strLine);
}
log(strResults.toString());
}
}
catch(Exception ex)
{
log(ex.getMessage());
}
finally
{
if(reader != null)
try
{
reader.Close();
reader = null;
}
catch(Exception ex)
{
ex.printStackTrace();
}
if(connection != null)
{
connection.disconnect();
connection = null;
}
}
我不知道是否有人已經經歷過這個在過去是定期嘗試連接錯誤的做法和排氣連接池的方法是什麼?
創建的連接會定期激活,並且不會(當前)批量連接在一起。
只是爲了分享一些信息,當我們遇到停電時,這是netstat在設備(ADB Shell)上顯示的內容。兩個「ESTABLISHED」連接是不是HTTP請求的TCP連接。手機有信號,數據符號顯示連接。
如果您不介意,添加setFollowRedirects的目的是什麼?從目前的響應來看,服務器無處不在重定向。 此外,setRequestMethod將只返回狀態碼。效率更高但是還有其他原因嗎? – 2014-10-03 11:43:11