web-dev-qa-db-fra.com

Obtenir le nom DNS de la machine locale vu par une machine distante

Je crée une application de messagerie instantanée peer-to-peer.

Actuellement, si UserA.pool.net dit "bonjour" à UserB.pool.net, l'utilisateur A voit "Vous: bonjour" et l'utilisateur B voit "UserA.pool.net: bonjour".

Plutôt que l'utilisateur A ne voit "vous", je veux qu'ils voient le nom d'hôte de leur propre machine afin que l'utilisateur A voit le même texte que l'utilisateur B.

24
Matt

La réponse courte est que si vous vraiment voulez que l'utilisateur A et l'utilisateur B voient le même texte, vous ne pouvez pas vous fier à trouver votre nom d'hôte vous-même. Vous avez besoin de l'utilisateur B pour transmettre sa vue du nom d'hôte de l'utilisateur A à l'utilisateur A et vice versa. En raison du NAT, vous ne pourrez pas simplement vérifier le nom d'hôte de votre propre ordinateur.

Alternativement, (Jonathon m'a battu à ce sujet dans les commentaires de la question), vous pouvez demander à chaque utilisateur d'envoyer son propre nom d'hôte privé dans le cadre de l'établissement de la connexion et de l'utiliser pour imprimer des messages sur l'extrémité distante.

14
Mark Peters

Voir ces fonctions de Java.net.InetAddress - getLocalHost et getHostName :

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

Notez que cela vous donne le nom d'hôte tel que la machine se voit; d'autres peuvent le voir avec un autre (par exemple, le fichier local hosts dit quelque chose de différent de DNS). En d'autres termes, il n'est pas garanti que la machine A sera vue avec le même nom d'hôte de la machine A, de la machine B ou de la machine C.

Comme le souligne @biniam_Ethiopia, il n'est même pas garanti que vous obtiendrez le même résultat de différents programmes sur la même machine, car ils peuvent utiliser la résolution de noms basée sur le réseau (voir par exemple ici ).

Il peut être plus utile d'envoyer l'identifiant complet: [email protected], au lieu de simplement piskvor.

79
Piskvor

J'ai obtenu le nom d'hôte de la machine locale dans le passé en utilisant quelque chose comme ceci:

InetAddress addr = InetAddress.getLocalHost();

String hostname = addr.getHostName();

Vous pouvez vous référer à: InetAddress.getHostName ()

14
Diego

Vous devrez peut-être utiliser getCanonicalHostName () pour obtenir le nom d'hôte complet qualifié qui inclut également le nom de domaine.

Code - String fullHostName = Java.net.InetAddress.getLocalHost (). GetCanonicalHostName ();

5
Viraj Kulkarni