내 Java 클라이언트 응용 프로그램에서 HttpsURLConnection을 사용하여 내 서버에 연결하고 있습니다. 이 모든 작업은 특정 시간을 제외하고는 전혀 시간 초과되지 않습니다. 나는 그런 (5000 MS)와 같은 연결의 시간 초과 매개 변수 설정 :제한 시간에는 제한이 없습니다? - HttpsURLConnection
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
// timeouts
con.setConnectTimeout(5000);
con.setReadTimeout(5000);
con.setRequestMethod("put");
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestProperty("Content-length", String.valueOf(output.length()));
OutputStreamWriter os = new OutputStreamWriter(con.getOutputStream(), "UTF-8");
BufferedWriter writer = new BufferedWriter(os);
writer.write(output);
writer.close();
os.close();
con.connect();
int respCode = con.getResponseCode();
if(respCode == 200) {
InputStreamReader is = new InputStreamReader(con.getInputStream());
BufferedReader br = new BufferedReader(is);
String input;
String respBody = "";
while ((input = br.readLine()) != null){
respBody += input;
}
br.close();
is.close();
this.result = respBody;
}
내가 모든 예외를 잡는거야,하지만 아무도 등록하지, 그래서 문제는 캐치되지 않는 예외가 될 수 없습니다. 연결은 단순히 시간 초과되지 않습니다. 나는 3 분을 기다렸고 응답이 없었다. 요청을 실행하는 동안 네트워크를 전환하는 동안 버그를 몇 번 재현 할 수있었습니다.
또한 가끔 약 1 분 후에 응답이있었습니다. 시간 초과보다 더 긴 시간입니다.
HttpsURLConnection을 연결 해제 한 후 제한 시간이 지나면 요청이 들어오는 스레드에 이미 인터럽트를 시도했습니다. 그러나 그것보다 깔끔한 해결책이 있어야합니다. 이 무한정 시간 초과가 어디에서 왔는지 알고 싶습니다.
아이디어가 있으십니까?
고맙습니다. 내 댓글에서
어떤 URL에 연결 하시겠습니까? 나는 당신의 질문에 대한 답이 당신이 타격을 가하는 서버에 달려 있다고 믿습니다 : 만약이 서버가 무한한 열린 연결을 가지면 당신의 관찰을 설명 할 수 있습니다. –
시간 초과시 발생하는 예외는 [java.net.SocketTimeoutException] (https://docs.oracle.com/javase/7/docs/api/java/net/SocketTimeoutException.html)이어야합니다. 이미 런타임 예외가 아니므로 잡아라. (코드에서 그렇게하는 것을 볼 수는 없다.) 또한 [API] (https://docs.oracle.com/javase/7/docs/api/java/net/URLConnection.html#setConnectTimeout%28int%29)에서 알 수 있습니다. "이것에 대한 일부 비표준 임 플리 멘 테이션 메소드가 지정된 타임 아웃을 무시할 수 있습니다. 연결 시간 초과 세트를 보려면 getConnectTimeout()을 호출하십시오. " 힌트가 될 수도 있습니다 ... – Mena
@Mena 실제로 getConnectTimeout() 결과를 인쇄 할 때 값을 할당 할 때마다 항상 0 (무한)이됩니다. 이제 HttpsURLConnection에는 setConnectTimeout() 메서드의 "비표준 구현"이 있다는 것을 알았습니다. 그럼에도 불구하고 무한 타임 아웃을 어떻게 제한 할 수 있습니까? – Zxifer