2012-04-18 51 views
3

所以我在使用InetAddress.getLocalHost.getHostAddress來獲取給定機器的外部IP地址時遇到問題。試圖讓InetAddress.getLocalHost.getHostAddress(Java/Scala)返回外部IP

我實際上是在Scala中這樣做 - 在某種意義上Akka Remote Actors的配置文件默認使用InetAddress.getLocalHost.getHostAddress來獲取機器的IP地址,這正是我想要的,因爲我將在多臺機器上部署這些actor 。但是,它似乎正在返回127.0.0.1而不是我想要的外部IP地址(因爲遠程角色需要在網絡中來回通信)。

的問題是,我不能使用任何的我在谷歌找到規避這種方法,因爲它們似乎都涉及調整代碼本身,而在這裏我真的沒有任何代碼進行調整, DSL僅自動使用InetAddress.getLocalHost.getHostAddress

我讀過關於從谷歌搜索,您可以通過編輯您的主機文件或東西繞過這個線程數?我該怎麼做呢?

謝謝! -kstruct

回答

3

您可能需要使用NetworkInterface類。

特別是使用靜態getNetworkInterfaces方法枚舉所有可用的網絡接口。

+0

我不認爲我可以這樣做 - 沒有代碼可以修改。這只是Akka Remote Actor配置文件的工作方式 - 如果沒有指定主機名,它使用'InetAddress.getLocalHost.getHostAddress',我從來沒有使用過它。 http://doc.akka.io/docs/akka/2.0/general/configuration.html – adelbertc 2012-04-18 18:28:43

+0

@kstruct。你是否與安全經理一起運行? getLocalHost的文檔說,如果您沒有正確的權限,該方法始終會返回回送地址。 – 2012-04-18 18:54:23

+0

嗯..我現在對JVM不太熟悉,你能向我解釋一下如何確定我是否在使用這個「安全管理員」嗎?如果這是相關的,我肯定沒有遠程機器的root訪問權限。 – adelbertc 2012-04-18 19:59:51

2

檢查你的/ etc/hosts文件。它應該將'localhost'映射到127.0.0.1,並將您的真實主機名映射到您的真實IP地址,或者其中之一: - |一些Linux發行版顯然會出錯。

+0

@yanghaogn我做*不*一點將信息移除爲「更清楚」。編輯被拒絕。 – EJP 2016-01-13 23:43:08