任何人都知道,雖然我已經改變了裏面的IP/etc/hosts中爲什麼InetAddress.getLocalHost()總是返回127.0.0.1?變更後InetAddress.getLocalHost()總是返回127.0.0.1
hostname -i
返回正確的IP(192.168.x.x),但InetAddress.getLocalHost()仍然是名字。
我使用的是JDK 1.6.0_31順便說一下,在CentOS 6.2。謝謝!
任何人都知道,雖然我已經改變了裏面的IP/etc/hosts中爲什麼InetAddress.getLocalHost()總是返回127.0.0.1?變更後InetAddress.getLocalHost()總是返回127.0.0.1
hostname -i
返回正確的IP(192.168.x.x),但InetAddress.getLocalHost()仍然是名字。
我使用的是JDK 1.6.0_31順便說一下,在CentOS 6.2。謝謝!
,因爲你必須重新啓動電腦或清除DNS緩存,以「應用」更改
感謝您的回覆。我已經重新啓動服務器並使用以下命令清除緩存:service nscd restart。但它仍然是一樣的。 – Jingwei 2012-07-21 14:42:44
這可能是一個安全限制問題。從javadoc:
如果有安全管理器,其checkConnect方法被調用 本地主機名和-1作爲參數,看是否操作 允許的。如果該操作不被允許,則返回代表 的InetAddress返回的環回地址。
感謝您的回覆。你知道我如何能夠檢查安全限制嗎? – Jingwei 2012-07-21 14:43:42
@景威:關於安全經理的[此](http://docs.oracle.com/javase/tutorial/essential/environment/security.html)鏈接可能對您有所幫助。 – Keppil 2012-07-21 14:50:52
謝謝@Keppil。我正在命令行運行rmi測試用例,以儘量減少任何容器的影響。根據鏈接'通常,一個Web小應用程序與瀏覽器或Java Web Start插件提供的安全管理器一起運行。其他類型的應用程序通常在沒有安全管理器的情況下運行,除非應用程序本身定義了一個。「我不應該使用任何安全管理器。爲了確認這一點,我檢查了'System.getSecurityManager()'的值,它返回null。因此,我不會因爲SecurityManager而減少它。 – Jingwei 2012-07-21 15:12:53
首先本地主機將始終表示回送地址127.0.0.1的(這是用來 調試TCP/IP堆棧。)當保安經理創立該操作是不允許的。
爲您的局域網地址使用InetAddress.getByName("PC NAME").getHostAddress()
請與您的PC名稱替換計算機名稱。
如:
public class StrTest {
public static void main(String[] args) throws IOException {
System.out.println(InetAddress.getByName("Vicky-PC").getHostAddress());
}
}
感謝您的回覆。問題是它是Java的RMI實現的一部分,我無法改變。 – Jingwei 2012-07-21 14:45:04
一個老問題,但也許這個信息將有助於別人 - 我一直在努力尋找任何地方(記錄的信息,也許是因爲它不是一個語言規範的正式部分),並且必須通過實驗來確定。
如果問題不下來到安全管理器,那麼最有可能的問題是,在操作系統級別名稱解析由於某種原因搞砸了。
至少在我已經上(OS X,Solaris和Linux)的所有測試的Unix平臺,通過Java中使用的過程是:
我看到由嚴重配置的/ etc /主機這打破,如:
127.0.0.1 localhost myhost
1.2.3.4 myhost
準確地給出上述症狀。
你重新啓動網絡服務? – Jeshurun 2012-07-21 14:22:42
感謝您的回覆@Jeshurun。我重新啓動了服務器。 – Jingwei 2012-07-21 15:15:17