getCanonicalHostName для localhost работает на Win 7, но не на XP? - PullRequest
0 голосов
/ 25 апреля 2011

Следующий простой код прекрасно работает в Windows 7, возвращая полное имя (например, «myhost.x.com»).Однако при запуске на компьютерах с Windows XP в той же сети он возвращает только имя хоста (например, «myhost»).Это известная проблема?Любые обходные пути?

hostName = InetAddress.getLocalHost().getCanonicalHostName();

Контекст: хотите сопоставить процессы с того же исходного компьютера на удаленном сервере.Клиентские процессы передают свое имя хоста, чтобы сервер мог группировать запросы с одного и того же клиентского компьютера, даже если они поступают из разных приложений на этом компьютере.Мы видим несоответствия для приложений, работающих на клиентских компьютерах, использующих XP, когда один клиентский процесс является Java, а другой - C #, потому что один полностью квалифицирован, а другой - нет.Клиенты Windows 7 работают нормально.Первоначально считалось, что .NET не получает полное доменное имя в XP, но теперь это, кажется, клиенты Java, использующие приведенный выше код.

Обновление: на той же машине XP клиент C ++ (не .NET)также в состоянии получить полное имя.Таким образом, кажется, что из трех, только Java на этом компьютере не может получить полное доменное имя с помощью этого API.Это Java 1.6.0_20-b02.Кроме того, код на Java и C ++ также должен работать на платформах, отличных от Windows.

1 Ответ

2 голосов
/ 25 апреля 2011

В документации к методу - http://download.oracle.com/javase/6/docs/api/java/net/InetAddress.html#getCanonicalHostName() - указано

"Получает полное доменное имя для этого IP-адреса. Метод наилучшего усилия, означающий, что мы не сможем вернуть полное доменное имя в зависимости отв базовой конфигурации системы. "

Я полагаю, что Java запрашивает преобразователь в операционной системе, который, по-видимому, отличается в 7 и XP.В любом случае SecurityManager может отменить этот запрос, что означает, что вам, возможно, придется пересмотреть процесс идентификации.Возможно, даже выполните DNS-поиск самостоятельно, основываясь на всех IP-номерах, которые есть у машины.

Какая информация вам нужна и почему?

...