以下简单代码在Windows 7上运行正常,返回完全限定名称(例如“myhost.x.com”)。但是,在同一网络中的Windows XP计算机上运行时,它仅返回主机名(例如“myhost”)。这是一个已知的问题?任何解决方法?
hostName = InetAddress.getLocalHost().getCanonicalHostName();
上下文:希望匹配远程服务器上相同原始计算机的进程。客户端进程传入其主机名,以便服务器可以对来自同一客户端计算机的请求进行分组,即使它们来自该计算机上的不同应用程序。当一个客户端进程是Java而另一个是C#时,我们看到使用XP在客户端计算机上运行的应用程序不匹配,因为一个是完全合格的而另一个不是。 Windows 7客户端工作正常。最初认为是.NET没有在XP上获得FQDN,但现在它似乎是使用上述代码的Java客户端。
更新:在同一台XP机器上,C ++客户端(不是.NET)也能够获得完全限定名称。所以看来三者中,只有这台机器上的java无法使用此API获取FQDN。这是Java 1.6.0_20-b02。此外,Java和C ++中的代码也需要在非Windows平台上运行。
答案 0 :(得分:2)
方法的文档 - http://download.oracle.com/javase/6/docs/api/java/net/InetAddress.html#getCanonicalHostName() - 说
“获取此IP地址的完全限定域名。尽力而为方法,这意味着我们可能无法根据基础系统配置返回FQDN。”
我相信Java要求操作系统中的解析器在7和XP上显然是不同的。无论如何,此请求可以由SecurityManager取消,这意味着您可能必须重新考虑您的身份识别过程。甚至可能基于所有机器所拥有的IP号码自己进行DNS查找。
您需要什么信息以及为什么?