簡體   English   中英

對於“127.0.0.1”,Windows 和 linux 中 InetSocketAddress#getHostName 的不同行為

[英]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#getHostName的文檔說:

如果這個 InetAddress 是用主機名創建的,這個主機名將被記住並返回; 否則,將執行反向名稱查找,並根據系統配置的名稱查找服務返回結果。

  • 這是預期的行為嗎?
  • 為什么不同操作系統存在這種差異?
  • 是不是 linux 和 windows 的名稱查找服務不同,這就是我們在行為上看到這種差異的原因?

我見過這個問題,但我的問題是關於 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM