Pourquoi un “java.net.ConnectException: Connection timed out” exception se produire lorsque l'URL est en place?
Je suis un ConnectException: Connection timed out
avec une certaine fréquence à partir de mon code. L'URL que je suis en train d'essayer de frapper le haut. Le même code fonctionne pour certains utilisateurs, mais pas d'autres. Il semble qu'une fois qu'un utilisateur commence à obtenir cette exception, ils continuent à prendre de l'exception.
Ici est la trace de la pile:
java.net.ConnectException: Connection timed out
Caused by: java.net.ConnectException: Connection timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.Socket.connect(Socket.java:516)
at java.net.Socket.connect(Socket.java:466)
at sun.net.NetworkClient.doConnect(NetworkClient.java:157)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:365)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:477)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:214)
at sun.net.www.http.HttpClient.New(HttpClient.java:287)
at sun.net.www.http.HttpClient.New(HttpClient.java:299)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:796)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:748)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:673)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:840)
Voici un extrait de mon code:
URLConnection urlConnection = null;
OutputStream outputStream = null;
OutputStreamWriter outputStreamWriter = null;
InputStream inputStream = null;
try {
URL url = new URL(urlBase);
urlConnection = url.openConnection();
urlConnection.setDoOutput(true);
outputStream = urlConnection.getOutputStream(); //exception occurs on this line
outputStreamWriter = new OutputStreamWriter(outputStream);
outputStreamWriter.write(urlString);
outputStreamWriter.flush();
inputStream = urlConnection.getInputStream();
String response = IOUtils.toString(inputStream);
return processResponse(urlString, urlBase, response);
} catch (IOException e) {
throw new Exception("Error querying url: " + urlString, e);
} finally {
IoUtil.close(inputStream);
IoUtil.close(outputStreamWriter);
IoUtil.close(outputStream);
}
- Veuillez marquer une réponse comme accepté si vous avez résolu votre problème 🙂
Vous devez vous connecter pour publier un commentaire.
Les délais de connexion (en supposant un réseau local et de plusieurs machines clientes) sont souvent le résultat de
un) une sorte de pare-feu sur la manière mange les paquets sans en informer l'expéditeur des choses comme "No Route to host"
b) la perte de paquets à cause d'une mauvaise configuration du réseau ou d'une ligne de surcharge
c) trop de demandes de surcharger le serveur
d) un petit nombre de threads/processus sur le serveur qui mène à tous d'être pris. Cela arrive en particulier avec les demandes qui prennent beaucoup de temps à s'exécuter et peut se combiner avec c).
Espère que cette aide.
Si l'URL fonctionne très bien dans le navigateur web sur la même machine, il se peut que le code Java n'est pas à l'utilisation d'un proxy HTTP, le navigateur utilise pour se connecter à l'URL.
Le message d'erreur dit tout: votre connection timed out. Cela signifie que votre demande n'a pas obtenu une réponse dans un délai de quelques (par défaut) calendrier. Les raisons qu'aucune réponse n'a été reçue, est probablement l'un des:
a) L'IP/domaine ou le port est incorrect
b) l'adresse IP et Le domaine ou le port (j'.e de service) est en baisse de
c) L'adresse IP/nom de domaine est pris plus de temps que votre délai d'attente par défaut pour répondre
d) Vous avez un pare-feu qui bloque les requêtes ou des réponses sur n'importe quel port vous utilisez
e), Vous disposez d'un pare-feu qui bloque les requêtes à cet hôte particulier
f) Votre accès à internet est en panne
g) Votre live-serveur est down je.e en cas de "reste-appel d'API".
Noter que les pare-feu et le port ou le blocage de l'IP peut être mis en place par votre fournisseur de services internet
Je voudrais vous recommandons d'augmenter le délai d'expiration de connexion avant d'obtenir le flux de sortie, comme suit:
Où 1000 est en millisecondes (1000 millisecondes = 1 seconde).
tracert
/traceroute
pour trouver le nombre de sautsJ'ai résolu mon problème avec:
ou
http.proxyHost
...Cela peut être une IPv6 problème (l'hôte publie une IPv6 AAAA-l'Adresse et les utilisateurs de l'hôte pense qu'il est configuré pour IPv6, mais il n'est pas correctement connecté). Cela peut aussi être un problème de MTU réseau, un pare-feu bloquer, ou de l'hôte cible pourrait publier des adresses IP différentes (au hasard ou en fonction sur les initiateurs de pays) qui ne sont pas tous accessibles. Ou similliar des problèmes de réseau.
Tu ne peux pas faire beaucoup en plus de la fixation d'un délai et d'ajouter de bons messages d'erreur (surtout l'impression d'hôtes' adresse résolue). Si vous voulez le rendre plus robuste ajouter réessayer, parallèle à essayer de toutes les adresses et aussi regarder dans la résolution de nom de la mise en cache (positifs et négatifs) sur la plate-forme Java.
Il est possible que votre adresse IP/host sont bloqués par l'hôte distant, surtout si elle pense que vous êtes en frappant trop dur.
La raison pour laquelle cela s'est produit pour moi était qu'un serveur distant a été permettant aux IP prises en compte, mais ne lui sont pas propres, et j'ai essayé de rendre les images à partir du serveur d'Url... donc tout simplement arrêter, l'affichage de l'erreur de dépassement de délai que vous avez eu...
Assurez-vous que le serveur est de permettre à ses propres droits de propriété intellectuelle ou que vous êtes rendu les choses à partir d'une certaine distance l'URL qui existe réellement.