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

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

目前,如果UserA.pool.net对UserB.pool.net说“你好”,用户A会看到“你好:你好”而用户B看到“UserA.pool.net:你好”。

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

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

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

请参阅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

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

 InetAddress addr = InetAddress.getLocalHost(); String hostname = addr.getHostName(); 

你可以参考: InetAddress.getHostName()

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

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