2012-04-16 487 views
7

我使用-Djava.rmi.server.hostname = localhost選項使rmi只監聽本地主機,但netstat顯示套接字正在監聽0.0.0.0java rmi -Djava.rmi.server.hostname = localhost仍然打開一個監聽0.0.0.0的套接字

奇怪的是,RMI RenewClean線程顯示其使用本地主機。例如。 RMI RenewClean- [本地主機:59357]

我認爲如果我設置-Djava.rmi.server.hostname =本地主機它應該只對127.0.0.1

聽我誤解什麼的java.rmi .server.hostname控件?

+0

0.0.0.0也回送。也許它變得困惑,因爲它們大致相同。 (我不知道其中的差別是什麼)你有沒有試過'-Djava.rmi.server.hostname = 127.0.0.1' – 2012-04-16 12:16:35

+1

@PeterLawrey號沒有什麼用它做。看到我的答案。 – EJP 2012-04-16 12:42:48

回答

17

我認爲如果我設置-Djava.rmi.server.hostname =本地主機它應該只 將在127.0.0.1監聽

我誤解了什麼java.rmi.server.hostname控件?

是的。 java.rmi.server.hostname與遠程對象偵聽的IP地址沒有任何關係。這是由RMIServerSocketFactory.

確定以糾正我的書misquotation在另一個答案(後來被刪除):

java.rmi.server.hostname:主機名字符串;默認值是本地主機的IP地址,採用「點」格式......當遠程對象被導出時,它被嵌入到由此JVM創建的遠程存根中。這可用於控制由多宿主主機導出的RMI服務器的有效IP地址。該屬性在JVM的生命中只讀一次[1]。

爲了擴展它,它也可以用來控制由NAT設備後面的主機導出的RMI服務器的有效IP地址(如客戶端所見)。它不一定與本地主機有任何關係,例如,在NAT情況下,它可以是主機名,虛擬四分之一IPv4地址或IPv6地址。

[1] Pitt & McNiff,java.rmi,遠程方法調用指南, Addison Wesley 2001,第258頁。

+0

TBH我不太懂那麼它是如何在http://stackoverflow.com/a/32418821/241986影響配置 - 沒有這條線就停止工作 – 2015-09-06 00:35:39

+0

@BorisTreukhov我回答說。它影響存根中的內容。不是它監聽的IP地址。 – EJP 2015-09-17 12:16:43