2011-04-25 119 views
0

以下簡單代碼在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平臺上運行。

+0

也許這只是一個錯誤沒有一個好的解決方法?我們可能會採用稍微不同的方法,使用簡單的名稱(例如'mymachine')而不是限定的名稱。 – 2011-04-29 13:42:42

回答

2

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

「這個IP地址獲取完全合格的域名盡力而爲方法,這意味着我們可能無法返回根據底層系統上的FQDN。組態。」

我相信Java在操作系統中要求解析器在7和XP上明顯不同。無論如何,這個請求可能被安全管理器取消,這意味着您可能需要重新考慮您的身份識別過程。也許甚至可以根據所有自己的DNS查找機器所具有的IP號碼。

你需要什麼信息?爲什麼?

+0

查看代碼後面的「上下文」段落,瞭解我們需要什麼以及爲什麼:想要識別源自同一臺計算機的遠程請求。因此需要一個獨特的識別客戶機。主機名可能不是唯一的,因此需要完全限定名稱。有些客戶端是java,其他.NET。 C#方法在這些相同的XP機器上正常工作。 Java代碼在Win7上正常工作。 – 2011-04-25 15:32:08

+0

我讀了上下文,但匹配標準可能是因爲別的。考慮讓應用程序從中央服務器請求一個日誌令牌,其中此請求包含所有可用的信息,然後客戶端在其日誌中使用日誌令牌。 – 2011-04-25 15:35:55

+0

更新了問題以澄清:客戶端進程傳遞其主機名,以便服務器可以對來自同一客戶端計算機的請求進行分組,即使它們來自該計算機上的不同應用程序。 – 2011-04-25 15:41:56

相關問題