Quelle est la cause de prise ConnectException: Connection timed out?

Nous avons un Webstart client qui communique avec le serveur par l'envoi d'objets sérialisés sur HTTPS à l'aide java.net.HttpsURLConnection.

Tout fonctionne parfaitement bien sur ma machine locale et sur les serveurs de test situé à notre bureau, mais je suis en train de vivre une très, très étrange question qui se produit uniquement sur notre production et la mise en scène des serveurs (et de façon sporadique). La principale différence que je sais d'entre ces derniers et ceux de notre bureau, c'est qu'ils se trouvent ailleurs et de la communication client-serveur avec eux est beaucoup plus lent, mais il a bien fonctionné pendant une longue période dans la production avant cette.

De toute façon, voici ce qui se passe:

  • Le client, après réglage des options telles que le délai d'attente et des propriétés telles que Content-Type sur le HttpURLConnection, les appels getOutputStream() sur elle pour obtenir le flux d'écrire à.
  • À ce point, de ce que je peux dire, le client se bloque pendant une certaine période de temps.
  • Le client puis lève l'exception suivante:
java.net.ConnectException: Connection timed out: connect 
à java.net.PlainSocketImpl.socketConnect(Native method) 
à java.net.PlainSocketImpl.doConnect(Source Inconnue) 
à java.net.PlainSocketImpl.connectToAddress(Source Inconnue) 
à java.net.PlainSocketImpl.connect(Source Inconnue) 
à java.net.SocksSocketImpl.connect(Source Inconnue) 
à java.net.Socket.connect(Source Inconnue) 
au com.soleil.net.le protocole ssl.interne.le protocole ssl.SSLSocketImpl.connect(Source Inconnue) 
au com.soleil.net.le protocole ssl.interne.le protocole ssl.BaseSSLSocketImpl.connect(Source Inconnue) 
au coucher du soleil.net.NetworkClient.doConnect(Source Inconnue) 
au coucher du soleil.net.www.http.HttpClient.openServer(Source Inconnue) 
au coucher du soleil.net.www.http.HttpClient.openServer(Source Inconnue) 
au coucher du soleil.net.www.le protocole.https.HttpsClient.(Source Inconnue) 
au coucher du soleil.net.www.le protocole.https.HttpsClient.Nouveau(Source Inconnue) 
au coucher du soleil.net.www.le protocole.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Source Inconnue) 
au coucher du soleil.net.www.le protocole.http.HttpURLConnection.plainConnect(Source Inconnue) 
au coucher du soleil.net.www.le protocole.https.AbstractDelegateHttpsURLConnection.connect(Source Inconnue) 
au coucher du soleil.net.www.le protocole.http.HttpURLConnection.getOutputStream(Source Inconnue) 
au coucher du soleil.net.www.le protocole.https.HttpsURLConnectionImpl.getOutputStream(Source Inconnue) 

Noter que ce n'est pas un SocketTimeoutException, qui le connect() méthode sur HttpURLConnection dit qu'il déclenche si le délai expire avant qu'une connexion puisse être établie. Aussi, quand cela arrive, je suis en mesure d'appeler conn.getResponseCode() et je reçois un code de réponse de 200.

  • Sur le côté serveur, un EOFException est jeté dans ObjectInputStream'constructeur, qui tente de lire la sérialisation d'en-tête mais ne parvient pas parce que le client n'est jamais le OutputStream à écrire à.

Dans le cas où cela peut aider, voici les appels sur le HttpsURLConnection avant l'appel de getOutputStream() (modifiée pour afficher uniquement les appels faits plutôt que sur l'ensemble de la structure de la code de le faire):

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();

La chose est, je n'ai aucune idée de comment tout cela a pu être le cas, en particulier étant donné qu'elle n'arrive parfois (pas de tendance claire de l'activité que je peux dire) et même alors, seulement quand il y a (relativement) élevé de temps de latence entre le client et le serveur.

Étant donné ce que j'ai pu trouver jusqu'à présent sur java.net.ConnectException: Connect timed out, je me demandais si ce n'était pas un réseau ou un problème de firewall sur le réseau de nos serveurs sont en cours d'exécution sur... mais cela ne fait pas beaucoup de sens pour moi étant donné que la demande est manifestement par le servlet. Aussi, d'autres applications fonctionnant sur le même réseau n'ont pas signalé des problèmes similaires.

Quelqu'un a une idée de ce que la cause de ce qui pourrait être, ou même ce que je dois étudier?

selon l ' "évaluation" de bugs.sun.com/bugdatabase/view_bug.do?bug_id=6319814 java.net.ConnectException peut être levée", soit" pour un délai d'attente "ou" pour toute autre erreur aléatoire de la raison...si ça peut aider toute

OriginalL'auteur ColinD | 2010-10-06