java.net.UnknownHostException: nom d'hôte non valide pour le serveur

1. Introduction

Dans ce didacticiel, nous allons découvrir la cause de UnknownHostException avec un exemple. Nous discuterons également des moyens possibles de prévenir et de gérer l'exception.

2. Quand l'exception est-elle levée?

UnknownHostException indique que l'adresse IP d'un nom d'hôte n'a pas pu être déterminée. Cela peut arriver à cause d'une faute de frappe dans le nom d'hôte:

String hostname = "//locaihost"; URL url = new URL(hostname); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.getResponseCode();

Le code ci-dessus lève une exception UnknownHostException car le locaihost mal orthographié ne pointe vers aucune adresse IP.

Une autre raison possible pour UnknownHostException est le retard de propagation DNS ou une mauvaise configuration DNS.

La propagation d'une nouvelle entrée DNS sur Internet peut prendre jusqu'à 48 heures.

3. Comment l'empêcher?

Il vaut mieux empêcher l'exception de se produire en premier lieu que de la gérer par la suite. Voici quelques conseils pour éviter l'exception:

  1. Vérifiez le nom d'hôte: assurez-vous qu'il n'y a pas de faute de frappe et coupez tous les espaces.
  2. Vérifiez les paramètres DNS du système: assurez-vous que le serveur DNS est opérationnel et accessible, et si le nom d'hôte est nouveau, attendez que le serveur DNS rattrape son retard.

4. Comment le gérer?

UnknownHostException étend IOException , qui est une exception vérifiée. Comme pour toute autre exception vérifiée, nous devons soit la lancer, soit l'entourer d'un bloc try-catch .

Traitons l'exception dans notre exemple:

try { con.getResponseCode(); } catch (UnknownHostException e) { con.disconnect(); }

Il est recommandé de fermer la connexion lorsque UnknownHostException se produit. Un grand nombre de connexions ouvertes inutiles peuvent entraîner une insuffisance de mémoire de l'application.

5. Conclusion

Dans cet article, nous avons appris ce qui cause UnknownHostException , comment l'empêcher et comment le gérer.

Comme toujours, le code est disponible sur Github.