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

时间:2011-04-08 14:44:38

标签: java networking

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

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

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

4 个答案:

答案 0 :(得分:79)

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

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

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

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

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

答案 1 :(得分:14)

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

InetAddress addr = InetAddress.getLocalHost();

String hostname = addr.getHostName();

您可以参考:InetAddress.getHostName()

答案 2 :(得分:14)

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

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

答案 3 :(得分:5)

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

代码 - String fullHostName = java.net.InetAddress.getLocalHost()。getCanonicalHostName();