Java getCanonicalHostName for localhost适用于Win 7,但不适用于XP?

Java getCanonicalHostName for localhost适用于Win 7,但不适用于XP?,java,windows,hostname,Java,Windows,Hostname,下面的简单代码在Windows7上运行良好,返回完全限定的名称(例如“myhost.x.com”)。但是,当在同一网络中的Windows XP计算机上运行时,它只返回主机名(例如“myhost”)。这是一个已知的问题吗?有解决办法吗 hostName = InetAddress.getLocalHost().getCanonicalHostName(); 上下文:希望在远程服务器上匹配来自同一原始计算机的进程。客户端进程传入其主机名,以便服务器可以对来自同一台客户端计算机的请求进行分组,即使这

下面的简单代码在Windows7上运行良好,返回完全限定的名称(例如“myhost.x.com”)。但是,当在同一网络中的Windows XP计算机上运行时,它只返回主机名(例如“myhost”)。这是一个已知的问题吗?有解决办法吗

hostName = InetAddress.getLocalHost().getCanonicalHostName();
上下文:希望在远程服务器上匹配来自同一原始计算机的进程。客户端进程传入其主机名,以便服务器可以对来自同一台客户端计算机的请求进行分组,即使这些请求来自该计算机上的不同应用程序。当一个客户端进程是Java,另一个是C#时,我们发现在使用XP的客户端机器上运行的应用程序不匹配,因为一个是完全合格的,另一个不是。Windows7客户端工作正常。起初以为是.NET没有在XP上获取FQDN,但现在看来是Java客户机在使用上述代码


Update:在同一XP机上,C++客户端(不.NET)也能获得完全限定名。因此,在这三种情况中,似乎只有这台机器上的java无法使用此API获取FQDN。这是Java1.6.0_20-b02。此外,爪哇和C++中的代码也需要在非Windows平台上工作。

< P>方法的文档-()-表示

获取此IP地址的完全限定域名。请使用“尽力而为”方法,这意味着根据基础系统配置,我们可能无法返回FQDN

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


您需要什么信息以及原因?

请参阅代码后面的“上下文”一段,了解我们需要什么以及为什么:要识别来自同一台机器的远程请求。因此,需要一个唯一的方法来识别客户机。主机名本身可能不是唯一的,因此需要完全限定的名称。有些客户机是java,有些是.NET。C#方法在这些XP机器上正常工作。Java代码在Win7上正常工作。我阅读了上下文,但匹配条件可能是因为其他原因。考虑将应用程序请求从中央服务器发出日志令牌,在此请求中包含所有可用的信息,然后客户端在其日志中使用日志令牌。更新问题以澄清:客户端进程传入其主机名,以便服务器可以对来自同一台客户端计算机的请求进行分组,即使这些请求来自该计算机上的不同应用程序。此外,多个接口都有IP号也存在问题(非常常见的主机虚拟化软件)-哪一个可以选择?为什么不能使用IP号?谢谢你的评论,你给了我们一些需要考虑的东西。我想我们有一个避免使用FQDN的解决方案。然而,最初的问题仍然是:为什么这个java API在WIN7(我想Linux)上工作得很好?在XC上,在C和非.NET C++中能够获得FQDN的机器上,不工作。在GeChanoNoCalNoNess方法中,这似乎是一个错误。也许这只是一个没有良好解决方案的bug?我们可能会使用简单的名称(例如“MyMeal'”)而不是限定名称采取稍微不同的方法。