2017-02-13 60 views
-1

我在我的程序中使用了InetAddress.getLocalHost(),它可以部署在Windows和Linux服務器上。它是否在這兩種環境中給出了IP地址?InetAddress.getLocalHost是否提供Windows和Linux系統的IP地址?

+0

如果它不管用什麼方式工作,不管底層系統如何,它的用途是什麼?這應該是Java的平臺獨立性的強項之一。 –

+0

Java是獨立於操作系統的,儘管在極少數情況下必須重新編譯爲特定的IO – nafas

回答

1

該方法給出了所有平臺上的IP地址。但是,它可能不會給你所期望的IP地址。

javadoc這樣說:

返回本地主機的地址。這是通過從系統中檢索主機的名稱,然後將該名稱解析爲InetAddress來實現的。

如果存在安全管理器,則使用本地主機名和-1作爲參數調用其checkConnect方法,以查看是否允許執行該操作。如果操作不被允許,則返回代表回送地址的InetAddress。

有各種各樣的場景中,一個應用程序給定的IP是不是你想要的IP地址或需要:

  • 如果應用程序是沙箱中,IP將是127.0.0.1
  • 如果本地DNS配置爲返回主機名稱的127.0.0.1,那麼這就是您將得到的。 (我見過這樣的系統配置有誤)
  • 如果系統有多個網卡,DNS查找可能會給你一個非暴露的NIC的IP地址。
  • 如果系統實際上是一臺虛擬機,那麼系統看到的IP可能與暴露在外部的IP不同。
  • 如果系統的IP位於專用IP範圍內,則不能「公開」尋址。