2015-07-14 2 views
1

Я пытаюсь получить имя хоста с сервера, на котором он запущен.InetAddress.getLocalHost(). GetHostName() throws UnknownHostException

код Java:

import java.net.InetAddress; 
System.out.println("Host Name: " + InetAddress.getLocalHost().getHostName()); 
System.exit(0); 

Выходные:

java.net.UnknownHostException: ThinkPad-Edge-E430: ThinkPad-Edge-E430: Name or service not known 
at java.net.InetAddress.getLocalHost(InetAddress.java:1473) 
at MailQ.main(MailQ.java:45) 
Caused by: java.net.UnknownHostException: ThinkPad-Edge-E430: Name or service not known 
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) 
at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:901) 
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1293) 
at java.net.InetAddress.getLocalHost(InetAddress.java:1469) 
... 1 more 

Хосты:

127.0.0.1 localhost #admin.local.com 
#127.0.1.1 ThinkPad-Edge-E430 
192.168.81.238 admin.local.com 
# The following lines are desirable for IPv6 capable hosts 
::1  ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 

Я не могу найти то, что вопрос здесь. Может ли кто-нибудь помочь мне?

+0

Возможный дубликат http://stackoverflow.com/questions/4969156/ error-java-net-unknownhostexception – Raedwald

ответ

1

попробовать это:

import java.net.InetAddress; 
import java.net.UnknownHostException; 

/** 
* @author Crunchify.com 
*/ 

public class CrunchifyGetIPHostname { 

    public static void main(String[] args) { 

     InetAddress ip; 
     String hostname; 
     try { 
      ip = InetAddress.getLocalHost(); 
      hostname = ip.getHostName(); 
      System.out.println("Your current IP address : " + ip); 
      System.out.println("Your current Hostname : " + hostname); 

     } catch (UnknownHostException e) { 

      e.printStackTrace(); 
     } 
    } 
} 

протестировать этот код на сайте http://www.browxy.com/

я взял его из http://crunchify.com/how-to-get-server-ip-address-and-hostname-in-java/

+0

Возможно, мне что-то не хватает, но этот код, похоже, делает то же самое, что и код OP. Единственное отличие состоит в том, что этот код ловит исключение. Но проблема все равно будет. – Montecarlo

1

Вы можете просто проверить: -

System.getProperty("os.name"); 

Затем используйте правильные переменные окружения для этой операционной системы, т.е.

Окно

System.getenv("COMPUTERNAME"); 

Linux

System.getenv("HOSTNAME"); 

Проблема с этим подходом заключается в том, что при запуске в менее обычных операционных системах вам, возможно, придется искать переменные среды.

По причинам, почему это не удается, я считаю, ваш ответ, вероятно, найти, посмотрев на этот пост: -

Recommended way to get hostname in Java

Любая попытка определить имя хоста по IP-адресу, как это

InetAddress.getLocalHost().getHostName()

обречена на провал, в некоторых обстоятельствах: