Was könnte die Ursache Buchse ConnectException: Connection timed out?

Haben wir eine Webstart-client, kommuniziert mit dem server durch das senden serialisierte Objekte, über HTTPS mithilfe von java.net.HttpsURLConnection.

Alles funktioniert einwandfrei auf meinem lokalen Rechner und auf dem test-Server befindet sich in unserem Büro, aber ich ' m erleben eine sehr, sehr seltsame Frage, die nur auftreten, auf unsere Produktions-und staging-Servern (und sporadisch an, dass). Der wesentliche Unterschied den ich kenne zwischen diesen Servern und die, die in unserem Büro ist, dass Sie sich an anderer Stelle und client-server-Kommunikation mit Ihnen ist zwar deutlich langsamer, aber es funktionierte gut für eine lange Zeit in der Produktion vor, dies auch.

Anyway, hier ist was passiert ist:

  • Der client nach der Einstellung von Optionen wie lese-timeout und-Eigenschaften wie Content-Type auf die HttpURLConnection fordert getOutputStream() auf es, um den stream zu schreiben.
  • An dieser Stelle, was ich sagen kann, der client reagiert nicht mehr für einige Zeit.
  • Der client wirft dann die folgende Ausnahme:
java.net.ConnectException: Connection timed out: connect 
bei java.net.PlainSocketImpl.socketConnect(Native-Methode) 
bei java.net.PlainSocketImpl.doConnect(Unknown Source) 
bei java.net.PlainSocketImpl.connectToAddress(Quelle Unbekannt) 
bei java.net.PlainSocketImpl.connect(Unknown Source) 
bei java.net.SocksSocketImpl.connect(Unknown Source) 
bei java.net.Socket.connect(Unknown Source) 
bei com.Sonne.net.ssl.intern.ssl.SSLSocketImpl.connect(Unknown Source) 
bei com.Sonne.net.ssl.intern.ssl.BaseSSLSocketImpl.connect(Unknown Source) 
bei der sun.net.NetworkClient.doConnect(Unknown Source) 
bei der sun.net.www.http.HttpClient.openServer(Unknown Source) 
bei der sun.net.www.http.HttpClient.openServer(Unknown Source) 
bei der sun.net.www.Protokoll.https.HttpsClient.(Quelle Unbekannt) 
bei der sun.net.www.Protokoll.https.HttpsClient.Neue(Unbekannte Quelle) 
bei der sun.net.www.Protokoll.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Quelle Unbekannt) 
bei der sun.net.www.Protokoll.http.HttpURLConnection.plainConnect(Quelle Unbekannt) 
bei der sun.net.www.Protokoll.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source) 
bei der sun.net.www.Protokoll.http.HttpURLConnection.getOutputStream(Quelle Unbekannt) 
bei der sun.net.www.Protokoll.https.HttpsURLConnectionImpl.getOutputStream(Quelle Unbekannt) 

Beachten Sie, dass dies nicht ein SocketTimeoutException, die die connect() Methode auf HttpURLConnection sagt es, wirft, wenn das timeout abläuft, bevor eine Verbindung hergestellt werden kann. Auch, wenn dies geschieht, ich bin in der Lage zu nennen conn.getResponseCode() und ich bekomme einen response-code von 200.

  • Auf der server-Seite, ein EOFException geworfen wird ObjectInputStream's Konstruktor, der das versucht zu Lesen der header-Serialisierung aber fehl, weil der client bekommt nie das OutputStream zu schreiben.

Falls es hilft, hier sind die Anrufe auf die HttpsURLConnection vor dem Aufruf von getOutputStream() (bearbeitet, um nur die Anrufe gemacht, anstatt die gesamte Struktur der code, dies zu tun):

HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setUseCaches(false);
conn.setReadTimeout(30000);
conn.setRequestProperty("Cookie", cookie);
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/x-java-serialized-object");
conn.getOutputStream();

Die Sache ist die, ich habe keine Ahnung, wie dies geschehen könnte, insbesondere angesichts der Tatsache, dass es nur passiert gelegentlich (keine klaren Muster der Aktivität, die ich sagen kann) und auch nur dann, wenn es (relativ) hohe Latenz zwischen dem client und dem server.

Gegeben, was ich habe finden können, so weit über java.net.ConnectException: Connect timed out fragte ich mich, ob es nicht einige Netzwerk-oder firewall-Problem im Netzwerk unserer Server laufen... aber das macht nicht viel Sinn für mich gegeben, dass die Anfrage klar durchkommen an das servlet. Auch andere apps laufen auf dem gleichen Netzwerk nicht gemeldet haben ähnliche Probleme.

Hat jemand eine Idee was die Ursache sein könnte, oder was ich prüfen sollte?

InformationsquelleAutor ColinD | 2010-10-06
Schreibe einen Kommentar