2013-08-28 2 views
5

Я не понимаю, почему ниже приведен код ниже 0.0.9.229 вместо 127.0.0.1. Может кто-нибудь сказать мне, горячий, чтобы это исправить?Java. InetAddress.getLocalHost возвращает странный IP

String ha = InetAddress.getLocalHost().getHostAddress(); 
System.out.println(ha); 

UPD: код работает на Ubuntu

/и т.д./хосты

127.0.0.1  localhost 
127.0.1.1  2533 

ответ

3

Проблема в том, что мое имя хоста будет состоять только из цифр и не может быть разрешено. Я изменяю свое/etc/hostname с символами в первой позиции, и проблема решена.

9

InetAddress.getLocalHost() не делать то, что большинство людей думают, что это делает. Он фактически возвращает имя хоста машины и IP-адрес, связанный с этим именем хоста. Это может быть адрес, используемый для подключения к внешнему миру. Это не так. Это зависит только от конфигурации вашей системы.

На моем оконном окне он получает имя машины и внешний адрес ip. В моем Linux-окне он возвращает имя хоста и 127.0.0.1, потому что у меня он установлен так в/etc/hosts

+0

Я использую lib, который содержит этот код. Я подозреваю, что должно быть что-то вроде 127.0.0.1 или localhost, но есть 0.0.9.229, что вызывает Невозможно связать с ошибкой URL. Я не понимаю, откуда из 0.0.9.229 – shurik2533

+0

Я знаю, что вы не отобранный ответ, но этот ответ спас мне массу горя сегодня. Благодаря! – durron597

2

Используйте NetworkInterface для перечисления сетевых интерфейсов; InetAddress.getLocalHost() всегда возвращает loopback. Если вы хотите, чтобы все IP-адреса, связанные с вашей машиной, использовали NetworkInterface, вы также получите 127.0.0.1.

Enumeration<NetworkInterface> nInterfaces = NetworkInterface.getNetworkInterfaces(); 

    while (nInterfaces.hasMoreElements()) { 
     Enumeration<InetAddress> inetAddresses = nInterfaces.nextElement().getInetAddresses(); 
     while (inetAddresses.hasMoreElements()) { 
      String address = inetAddresses.nextElement().getHostAddress(); 
      System.out.println(address); 
     } 
    } 
Смежные вопросы