Maison >Java >javaDidacticiel >Comment résoudre UnknownHostException en Java ?

Comment résoudre UnknownHostException en Java ?

王林
王林avant
2023-04-23 21:01:055250parcourir

Une exception Java.NET.UnknownHostException s'est produite lors du démarrage de la résine de la machine de test nouvellement attribuée à un collègue. La cause du problème était que le nom d'hôte était configuré dans le fichier /etc/Hostname du système, mais qu'il n'y avait pas de configuration correspondante dans le fichier /etc/hosts. déposer. La solution simple consiste à configurer la relation correspondante, voire à supprimer le fichier /etc/Hostname.

Comment résoudre UnknownHostException en Java ?

Raison profonde : dans la plupart des systèmes d'exploitation Linux, le nom d'hôte est trouvé en fonction de la configuration dans /etc/hosts, mais le système basé sur Detian utilise la configuration dans le fichier /etc/Hostname comme nom d'hôte.

Et InetAddress.java de Java appelle la chaîne native publique getLocalHostName() de InetAddressImpl.java et lance UnknownHostException pour obtenir le nom d'hôte local. Cette méthode de Java est native et est une implémentation du système local, il y a donc des problèmes avec la configuration locale. Dans certains cas, il y a un problème avec le code Java.

hostname Afficher le nom de cette machine,

  • Si le nom de cette machine n'est pas une adresse IP, comme "sohu", vous devez configurer sohu dans /etc/hosts pour qu'il corresponde à l'IP locale, sinon java .net.InetAddress.getLocalHost Une exception java.Net.UnknownHostException sera levée

  • Si le nom de cette machine est une adresse IP et qu'il doit s'agir de l'adresse IP d'une certaine carte réseau sur cette machine,

  • . La troisième situation est plus problématique. Si le nom de la machine locale est une adresse IP, mais pas l'IP d'une certaine carte réseau de la machine locale, ou n'est qu'une partie d'une adresse IP, telle que 192.168 (c'est ce que j'ai rencontré), alors exécutez java .net.InetAddress.getLocalHost().getHostAddress() obtiendra 192.0.0.168, java.net.InetAddress.getLocalHost().getHostAddress() ne lancera pas d'exception, mais l'accès associé stagnera pendant longtemps car il est recherche de l'adresse 192.0.0.168. Si le réseau Si cette adresse n'existe pas dans le réseau, une exception de délai de connexion dépassé sera éventuellement levée si cette adresse existe dans le réseau, l'exception de connexion refusée d'héberger sera levée, ce qui n'est évidemment pas ce que vous voulez

Conclusion :
1. Paramètres Nom local : nom d'hôte Il est préférable que mName xxx ne soit pas écrit sous la forme d'une adresse IP. S'il est écrit, il doit s'agir de la forme IP complète de la machine locale (. n'écrivez pas seulement la moitié)
2. Ajoutez une ligne d'adresse IP locale mName à /etc/hosts
3. Utilisez InetAddress.getLocalHost().getHostAddress() pour tester si le résultat est cohérent avec l'adresse IP locale

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer