Получить DNS-имя локальной машины, как видно на удаленной машине - PullRequest
24 голосов
/ 08 апреля 2011

Я делаю одноранговое приложение для обмена мгновенными сообщениями.

В настоящее время, если UserA.pool.net говорит "привет" UserB.pool.net, пользователь A видит "Вы: привет", а пользователь B видит "UserA.pool.net: привет".

Вместо пользователя A, увидев «Вы», я хочу, чтобы они увидели имя хоста своего компьютера, чтобы пользователь A видел тот же текст, что и пользователь B.

Ответы [ 4 ]

79 голосов
/ 08 апреля 2011

См. Эти функции java.net.InetAddress - getLocalHost и getHostName :

String localhostname = java.net.InetAddress.getLocalHost().getHostName();

Обратите внимание, что это дает вам имя хоста, поскольку машина видит себя; другие могут видеть это с другим (например, локальный файл hosts говорит что-то отличное от DNS). Другими словами, не гарантируется, что машина A будет отображаться с тем же именем хоста, что и машина A, машина B или машина C.

Как указывает @biniam_Ethiopia, даже не гарантируется, что вы получите одинаковый результат от разных программ на одном компьютере, так как они могут использовать сетевое разрешение имен (см., Например, здесь ).

Может быть более полезно отправить весь идентификатор: piskvor@lachtan.my.network.example.com, а не просто piskvor.

14 голосов
/ 08 апреля 2011

Краткий ответ таков: если вы действительно хотите, чтобы пользователь А и пользователь Б видели один и тот же текст, вы не можете рассчитывать на то, что вы сами узнаете имя своего хоста. Пользователь B должен передать свое представление имени хоста пользователя A пользователю A и наоборот. Благодаря NAT вы не сможете просто проверить имя хоста своего компьютера.

В качестве альтернативы (Джонатон опередил меня в комментариях к вопросу) вы можете попросить каждого пользователя отправлять свое личное имя хоста в качестве части подтверждения соединения и использовать его для печати сообщений на удаленном конце.

14 голосов
/ 08 апреля 2011

В прошлом я получал имя хоста локальной машины, используя что-то вроде этого:

InetAddress addr = InetAddress.getLocalHost();

String hostname = addr.getHostName();

Вы можете сослаться на: InetAddress.getHostName ()

5 голосов
/ 14 сентября 2013

Вам может потребоваться использовать getCanonicalHostName (), чтобы получить полное имя хоста, которое также включает имя домена.

код - String fullHostName = java.net.InetAddress.getLocalHost (). GetCanonicalHostName ();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...