获取远程计算机看到的本地计算机的DNS名称

Mat*_*att 24 java networking

我正在制作点对点即时消息应用程序.

目前,如果UserA.pool.net向UserB.pool.net说"hello",则用户A看到"你:你好",用户B看到"UserA.pool.net:hello".

我希望他们看到自己机器的主机名,以便用户A看到与用户B相同的文本,而不是用户A看到"你".

Pis*_*3.0 79

请参阅java.net.InetAddress的这些函数 - getLocalHostgetHostName:

String localhostname = java.net.InetAddress.getLocalHost().getHostName();
Run Code Online (Sandbox Code Playgroud)

请注意,这会在机器看到自己时获取主机名; 其他人可能会看到不同的(例如,本地hosts文件说的不同于DNS).换句话说,不能保证机器A与机器A,机器B或机器C具有相同的主机名.

正如@biniam_Ethiopia指出的那样,甚至不能保证你会从同一台机器上的不同程序得到相同的结果,因为它们可能正在使用基于网络的名称解析(例如在这里看到).

发送整个标识符可能更有用:piskvor@lachtan.my.network.example.com而不仅仅是piskvor.


Die*_*ego 14

我过去使用过这样的东西获得了本地机器的主机名:

InetAddress addr = InetAddress.getLocalHost();

String hostname = addr.getHostName();
Run Code Online (Sandbox Code Playgroud)

你可以参考:InetAddress.getHostName()


Mar*_*ers 14

简短的回答是,如果您真的希望用户A和用户B看到相同的文本,您不能依赖自己查找您的主机名.您需要用户B将用户A主机名的视图传输给用户A,反之亦然.由于NAT,您将无法检查自己计算机的主机名.

或者,(Jonathon在问题评论中打败了我)你可以让每个用户发送他们自己的私人主机名作为连接握手的一部分,并使用它来在远程端打印消息.


Vir*_*rni 5

您可能需要使用getCanonicalHostName()来获取包含域名的完整限定主机名.

Code - String fullHostName = java.net.InetAddress.getLocalHost().getCanonicalHostName();