2017-02-13 26 views
-1

Я использую InetAddress.getLocalHost() в своей программе, которая может быть развернута на серверах Windows и Linux. Дает ли он IP-адрес в обеих средах?Предоставляет ли InetAddress.getLocalHost IP-адрес системы Windows и Linux?

+0

Если это не сработало, независимо от базовой системы, каково будет использование этого? Это должно быть одной из сильных сторон Java, независимости платформы. –

+0

Java независима от ОС, хотя в редких случаях необходимо перекомпилировать ее для конкретного ввода-вывода – nafas

ответ

1

Метод дает IP-адрес на всех платформах. Однако он может не дать вам IP-адрес, который вы ожидаете.

javadoc говорит, что это:

Возвращает адрес локального хоста. Это достигается путем извлечения имени хоста из системы, а затем разрешения этого имени в InetAddress.

Если есть менеджер безопасности, его метод checkConnect вызывается с именем локального хоста и -1 в качестве аргументов, чтобы увидеть, разрешена ли операция. Если операция не разрешена, возвращается InetAddress, представляющий обратный адрес.

Есть целый ряд сценариев, в которых IP, что заявка подана не IP-адрес, который вы хотите или потребность:

  • Если приложение песочницы, то IP будет 127.0.0.1.
  • Если локальный DNS настроен на возврат 127.0.0.1 имени хоста, то это то, что вы получите. (Я видел, что системы неправильно сконфигурированы.)
  • Если система имеет несколько сетевых адаптеров, поиск DNS может дать вам IP-адрес незащищенного сетевого адаптера.
  • Если система фактически является виртуальной машиной, то IP-адрес, который видит система, может отличаться от того, который находится снаружи.
  • Если IP-адрес системы находится в частном IP-диапазоне, он не будет адресуться «публично».

 Смежные вопросы

  • Нет связанных вопросов^_^