0

以下简单代码在 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 平台上运行。

4

1 回答 1

2

该方法的文档 - http://download.oracle.com/javase/6/docs/api/java/net/InetAddress.html#getCanonicalHostName () - 说

“获取此 IP 地址的完全限定域名。尽力而为的方法,这意味着我们可能无法返回 FQDN,具体取决于底层系统配置。”

我相信 Java 会询问操作系统中的解析器,这在 7 和 XP 上显然是不同的。无论如何,SecurityManager 可以拒绝此请求,这意味着您可能必须重新考虑您的识别过程。甚至可以根据机器拥有的所有IP 号码自己进行 DNS 查找。

您需要什么信息,为什么?

于 2011-04-25T15:26:29.713 回答