안드로이드 4.1.2와 4.2.2에서 간헐적 인 연결 문제가 발생하여 HTTP 스택이 완전히 시간 초과 된 것처럼 보입니다. (DNS 조회와 TCP/IP가 여전히 작동합니다. ADB 쉘을 사용하여 체크 할 수 있습니다.).안드로이드 HttpURLConnection 연결 타임 아웃
이러한 연결은 WiFi가 아닌 GPRS에서 실패합니다.
SHELL을 사용하여 netstat를 검사 할 때 연결이 SYN_SENT에서 대기하고있는 것을 볼 수 있으며 서버의 방화벽을 검사 할 때 SYN 요청에 응답했지만 실제로는 아무것도들을 수 없습니다. 장치. 이 정전 동안 모든 HTTP 트래픽이 장치에서 실패한 것처럼 보입니다. Exchange는 더 이상 작동하지 않으며 기기가 네트워크를보고하고 전화를 걸고받을 수있는 경우에도 일반 브라우저 (Firefox, Chrome)를 사용하여 페이지를 요청할 수 없습니다.
내 응용 프로그램은 HTTP 및 HTTPS를 통해 통신하며이 중단 중에 모두 실패합니다. POST와 내 JSON 웹 서비스에 GET, 요청이 중단 및 던져 :
이 문제는 내가 HttpURLConnection의와 함께 아래에 설정 한 시간 제한을 존중한다로 연결하는 데 않다면이 예상된다java.net.SocketTimeoutException: failed to connect to mywebaddress.com/1.1.1.1 (port 443) after 10000ms
.
내가 사용하는 코드는 다음과 같습니다 (Async 클래스에 있음). 이것은 메시지의 중요성에 따라 연결 루프에 포함되는 경우가 많습니다. 이것은 각 통화 사이에 15 초 간격으로 최대 3 회까지 호출 될 수 있습니다. 사람이 과거에 이것을 경험 한 경우
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 쉘)에 표시 한 것입니다. 두 개의 "ESTABLISHED"연결은 HTTP 요청이 아닌 TCP 연결입니다. 모바일에 신호가 있고 데이터 기호에 연결이 표시됩니다.
괜찮 으면 setFollowRedirects를 추가하는 목적은 무엇입니까? 현재 응답에서 서버가 어디에서나 리디렉션되는 것은 아닙니다. 또한 setRequestMethod는 상태 코드 만 반환합니다. 훨씬 더 효율적이지만 다른 이유가 있습니까? –