以下簡單代碼在Windows 7上正常工作,返回完全限定名稱(例如'myhost.x.com')。但是,當在同一網絡中的Windows XP計算機上運行時,它僅返回主機名(例如'myhost')。這是一個已知的問題?任何解決方法?本地主機的getCanonicalHostName適用於Win 7,但不適用於XP?
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平臺上運行。
也許這只是一個錯誤沒有一個好的解決方法?我們可能會採用稍微不同的方法,使用簡單的名稱(例如'mymachine')而不是限定的名稱。 – 2011-04-29 13:42:42