90 votes

InetAddress.getLocalHost() throws UnknownHostException


Je suis en train de tester notre serveur d'application (écrit en Java) sur différents systèmes d'exploitation et de la pensée qu'OpenSolaris (2008.11) serait pour le moins gênante en raison de la belle intégration Java. En fait, j'ai mal, que je me retrouve avec un UnknownHostException

try {
  computerName = InetAddress.getLocalHost().getHostName();
  if (computerName.indexOf(".") > -1)
    computerName = computerName.substring(0,
        computerName.indexOf(".")).toUpperCase();
} catch (UnknownHostException e) {
  e.printStackTrace();
}

La sortie est:

java.net.UnknownHostException: desvearth01: desvearth01
    at java.net.InetAddress.getLocalHost(InetAddress.java:1353)

Toutefois, nslookup desvearth01 renvoie l'adresse IP correcte, et nslookup localhost retours 127.0.0.1 comme prévu. Aussi, le même code fonctionne parfaitement sur FreeBSD. Est-il rien de spécial à OpenSolaris que je ne suis pas au courant?

Tous les conseils apprécié, merci.

125voto

jhwist Points 5270

Dans la bonne tradition, je peux répondre à ma propre question encore une fois:

Il semble qu' InetAddress.getLocalHost() ignore le /etc/resolv.conf mais seulement regarde le fichier /etc/hosts (où je n'avais pas spécifié autre chose que localhost). Ajout de l'adresse IP et le nom d'hôte de ce fichier permet de résoudre le problème et l'exception est allé.


La réponse ci-dessus est presque correct et j'ai eu de l'indice à partir de ci-dessus et mon problème résolu...Merci.

Mais pour améliorer cette situation, je suis ajoutant des étapes par étapes des changements, de sorte qu'il sera utile, même pour les utilisateurs naïve.

Étapes:

  • Ouvrez le fichier /etc/hosts, les entrées pourrait ressembler à ci-dessous.

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4  
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
  • vous devez ajouter une ligne au-dessus de ce par n'importe quel éditeur de texte comme vi ou gedit. <your-machine-ip> <your-machine-name> localhost par exemple.

    192.168.1.73 my_foo localhost
    

Maintenant, le fichier peut ressembler à ceci:

192.168.1.73 my_foo localhost
127.0.0.1    localhost localhost.localdomain localhost4 localhost4.localdomain4
::1          localhost localhost.localdomain localhost6 localhost6.localdomain6
  • Il suffit de la sauvegarder et de courir à nouveau votre code java...votre travail est fait.

4voto

Martin Points 343

Hôte des recherches sur Solaris utilise /etc/nsswitch.conf donc, en fonction de ce que les hôtes: la ligne dit qu'il détermine si /etc/hosts, NIS, DNS et/ou LDAP doit être consulté.

Si vous utilisez uniquement les hôtes et les DNS, vous devez en /etc/nsswitch.conf:

hosts: files dns

La raison en nslookup desvearth01 fonctionne est parce que l' nslookup commande directement consulte /etc/resolv.conf. Si vous souhaitez faire un meilleur test de ligne de commande, utilisez la commande:

getent hôtes desvearth01

0voto

Pavel Points 1

Si vous voyez ce message, que vous devez définir le nom d'hôte AVEC hostname superhost.domain COMMANDE!

Après cela, vérifiez /etc/hosts le fichier contient chaîne comme celle-ci 127.0.0.1 localhost.

Aussi, vérifiez que la commande uname -a renvoie à quelque chose comme ceci:

Linux superhost.domaine 2.6.38-8-server #42-Ubuntu SMP Mon Apr 11 03:49:04 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

PAS COMME CELA!!!!

Linux (aucun) 2.6.38-8-server #42-Ubuntu SMP Mon Apr 11 03:49:04 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

0voto

Jon Points 670

Je vais avoir des questions autour de cette. J'ai besoin de faire plus de tests, mais il semble que NetworkInterface.getNetworkInterfaces() peut être plus fiable. Je pense que ce n'est pas la recherche, mais juste l'accaparement de la propriété intellectuelle.

Je l'utilise comme le "meilleur" lorsque le getLocalHost() échoue.

0voto

Dean Hiller Points 5292

Une autre option est dans ce post (en fait, ce qui est dans votre /etc/sysconfig/network fichier pour votre hostname...by un nom de domaine complet de ce problème est résolu).

java getLocalHost() UnknownHostException fichier /etc/hosts linux diffère de l'api?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X