In meiner Java-Client-Anwendung verbinde ich mich mit meinem Server mit HttpsURLConnection. Dies funktioniert alles gut, außer in bestimmten Momenten ist es keine Auszeit. Ich habe die Timeout-Parameter der Verbindung als solche (bis 5000 ms):Timeout hat keine Begrenzung? - 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;
}
ich alle Ausnahmen bin fangen, aber keiner registriert ist, so kann das Problem nicht abgefangene Ausnahme sein. Die Verbindung wird einfach nicht beendet. Ich wartete 3 Minuten und hatte keine Antwort. Ich könnte den Fehler einige Male reproduzieren, während ich das Netzwerk während der Ausführung einer Anfrage umschalte.
Auch manchmal gab es eine Antwort nach etwa einer Minute. Welches ist länger als die Timeouts.
Ich habe bereits versucht, den Thread zu unterbrechen, auf den die Anfrage nach einer Zeitüberschreitung gestellt wird, die HttpsURLConnection zu trennen. Aber es muss eine bessere Lösung geben. Ich würde gerne wissen, woher diese unbestimmte Zeitüberschreitung kommt.
Irgendwelche Ideen?
Vielen Dank!
Mit welcher URL verbinden Sie sich? Ich glaube, die Antwort auf Ihre Frage kann von dem Server abhängen, den Sie treffen: Wenn es diesem Server nichts ausmacht, eine unbegrenzte offene Verbindung zu haben, könnte dies Ihre Beobachtungen erklären. –
Die Ausnahme, die im Falle eines Timeouts ausgelöst wird, sollte [java.net.SocketTimeoutException] (https://docs.oracle.com/javase/7/docs/api/java/net/SocketTimeoutException.html) lauten, was Sie tun sollten schon fangen, da es keine Laufzeitausnahme ist (kann aber nicht sehen, wie Sie das in Ihrem Code machen). Beachten Sie auch, dass aus der [API] (https://docs.oracle.com/javase/7/docs/api/java/net/URLConnection.html#setConnectTimeout%28int%29): "Einige nicht-Standard-Implementation von diesem Die Methode ignoriert möglicherweise das angegebene Zeitlimit. Um das Verbindungszeitlimit anzuzeigen, rufen Sie getConnectTimeout() auf. ". Könnte ein Hinweis sein ... – Mena
@Mena in der Tat, wenn ich das getConnectTimeout() Ergebnis drucke, bekomme ich immer 0 (unendlich), egal welchen Wert ich ihm zuweisen. Wir wissen nun, dass HttpsURLConnection eine "Nicht-Standard-Implementierung" der setConnectTimeout() -Methode hat. Aber wie kann ich die unendliche Auszeit trotzdem beschränken? – Zxifer