[英]Different behavior of InetSocketAddress#getHostName in windows and linux for "127.0.0.1"
InetAddress.getByName("127.0.0.1").getHostName()
Windows 中的上述String
返回127.0.0.1
但在 linux 中它返回localhost
。
如果這個 InetAddress 是用主機名創建的,這個主機名將被記住並返回; 否則,將執行反向名稱查找,並根據系統配置的名稱查找服務返回結果。
我見過這個問題,但我的問題是關於 Windows 和 linux 中 API 行為的差異以及這種差異的原因。
因此,Windows 和 Linux 之間沒有主要區別。 但是,兩者的配置有所不同。 正如您引用的問題所述,這取決於hosts
文件中的內容。 這是一個在 Windows 和 Linux 上都存在的文件,它告訴操作系統可以將哪些 IP 分配給特定的主機名。 這是文件中的一個示例條目:
127.0.0.1 localhost
這將告訴操作系統,如果我向localhost
發出請求,只需將請求路由到127.0.0.1
。 它類似於 DNS 服務器的作用,但該過程發生在您的計算機上,無需檢查互聯網。
現在,參考為什么該行在不同平台上發生變化。 文檔是這樣說的:
如果這個 InetAddress 是用主機名創建的,這個主機名將被記住並返回; 否則,將執行反向名稱查找,並根據系統配置的名稱查找服務返回結果。 如果需要查找名稱服務,請調用 getCanonicalHostName。
本節指的是在hosts
文件中指定的hosts
名。 在您的 Linux 系統上, hosts
文件有一個類似於上面的條目(這在 Linux 環境中很常見)。 Java 注意到這一點,並返回那個而不是 IP。 由於在 Windows 上沒有這樣的條目,它只是簡單地返回 IP。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.