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