0

가능한 중복은 :
Receiving request timeout even though connect timeout and read timeout is set to default (infinite)?ConnectTimeout 및 ReadTimeout이 무한 경우 SocketTimeoutException이 발생합니까?

나는 웹 서비스에 연결을 시도하고 약 20 초 후에 SocketTimeoutException을 받았다. 웹 서비스를 호스팅하는 Tomcat 서버가 다운되어 Exception이 예상됩니다. 그러나 ConnectTimeout 및 ReadTimeout 값을 설정하지 않았습니다. 문서에 따르면이 둘의 기본값은 무한합니다.

하나의 가능성은 내가 연결을 시도한 서버가 자체 제한 시간을 갖고 있다는 것입니다. 하지만 친구가 iOS를 사용하여 친구와 연결을 시도하면 약 1 분 15 초가 지나면 연결 시간이 초과되었습니다. 서버가 타임 아웃을 발행하는 서버 인 경우 우리의 연결은 거의 동일한 시간에 종료되어야합니다. 그는 또한 iOS의 기본 시간 제한을 사용하고 있습니다.

  • 연결 및 읽기 타임 아웃이 무한대로 설정되어있을 때 소켓이 너무 일찍 종료 된 이유는 무엇입니까?
  • 연결 시간 제한을 읽는 데 소켓 시간 초과가 다릅니 까? 그렇다면 어떻게 다른가요?
  • 소켓 시간 초과 값을 어떻게 알 수 있습니까? HttpURLConnection을 사용하고 있습니다.
  • 소켓 시간 초과를 설정하는 방법이 있습니까? 방법? 다음은

내 코드의 조각입니다 :

httpURLConnection = (HttpURLConnection) ((new URL("http://www.website.com/webservice")).openConnection()); 
httpURLConnection.setDoInput(isDoInput); 
httpURLConnection.setDoOutput(isDoOutput); 
httpURLConnection.setRequestMethod(method); 

try 
{ 
    OutputStreamWriter writer = new OutputStreamWriter(httpURLConnection.getOutputStream()); 
    writer.write("param1=value1"); 
    writer.flush; 
}catch(Exception e) 
{ 

} 
+0

다시 게시 : http://stackoverflow.com/questions/9986712/receiving-request-timeout-even-though-connect-timeout-and-read-timeout-is-set-to – Krrose27

+0

왜 다시 요청 하시겠습니까? 이미 대답 해 주신 질문이 있습니까? – EJP

+0

@ Krroae27 : 언급 해 주셔서 감사합니다. 내 사과. 나는 일시적으로이 문제에 대한 작업을 중단하고 다른 작업을 수행합니다. 전에 비슷한 질문을 게시 한 사실을 잊어 버렸습니다. – Arci

답변

3

왜 소켓 이렇게 일찍 내 연결 읽기 타임 아웃이 무한으로 설정하면 제한 시간을 초과 했습니까?

코드하시기 바랍니다.

시간 제한을 연결하고 읽는 데 소켓 시간 초과가 다릅니 까? 그렇다면 어떻게 다른가요?

SocketTimeoutException은 읽기 타임 아웃입니다.

어떻게 소켓 시간 초과 값을 알 수 있습니까? HttpURLConnection을 사용하고 있습니다.

HttpURLConnection.getReadTimeout(); 또한 HttpURLConnection.getConnectTimeout().

소켓 시간 초과를 설정하는 방법이 있습니까? 방법?

HttpURLConnection.setReadTimeout().

당신은 이미 original post에 모든 방법을 언급했다. 왜 그들에 대해 물어 보는거야?

+0

감사! 이미 내 코드 스 니펫을 포함하도록 내 질문을 업데이트했습니다. 앞서 말했듯이 나는 원래의 글을 잊었다. 이 게시물을 삭제하려고했지만 이미 이미 답변이 있기 때문에 이미 할 수 없습니다. 어쨌든, 내 readTimeout은 기본값 인 무한대를 사용하고 있습니다. 또한 getReadTimeout을 사용하여 값을 확인했습니다. – Arci

0

마지막으로, 타임 아웃이 발생했습니다. 실제로 타임 아웃을 일으키는 서버라는 것이 밝혀졌습니다.나는 1 분 이상 iOS를 사용할 때 다른 타임 아웃을 받기 때문에 처음에는이 것을 의심한다.

여기에 있습니다 : 내 Tomcat 서버를 보유하고있는 운영 체제는 Windows입니다. 응답하지 않은 연결에 대한 Windows의 기본 재시도 횟수는 2입니다. 따라서 연결 시도가 실패 할 경우 여전히 재 시도 횟수가 2 회 남습니다. 재 시도는 모두 내부적으로 수행됩니다. 각 재시도 시간을 계산하는 방법을 모르지만 기본적으로 3 + 6 + 12 = 21 초입니다.

  • 1 재시도 = 삼초
  • 2 재시도 = 육초
  • 3 재시도 = 12 초 3 회 재시도 후

, 당신의 연결이 차단 될 것입니다. 또한, 그 시간까지, 당신은 이미 21 초를 기다렸습니다.

+0

(1) Windows가이 문제를 일으키지 않습니다. 연결시 Windows 동작을 설명했습니다. 귀하의 질문은 연결시 안드로이드의 행동에 관한 것입니다. (2) 연결하려고 할 때'SocketTimeoutException'을 얻는다면 그것은'Android' 플랫폼의 버그입니다. 그것은 'connection timed out'메시지와 함께'ConnectException'을 던져야 만합니다. 'SocketTimeoutException'은 Javadoc에서 말하는 것처럼 읽기 전용입니다. – EJP