java rmi -Djava.rmi.server.hostname = localhost仍会打开一个监听0.0.0.0的套接字

Nei*_*man 8 java rmi

我使用-Djava.rmi.server.hostname = localhost选项使rmi仅在localhost上侦听,但netstat显示套接字正在侦听0.0.0.0.

奇怪的是RMI RenewClean线程显示它使用localhost.例如RMI RenewClean- [localhost:59357]

我假设如果我设置-Djava.rmi.server.hostname = localhost它应该只在127.0.0.1上侦听

我误解了java.rmi.server.hostname控制的内容吗?

use*_*421 18

我假设如果我设置-Djava.rmi.server.hostname = localhost它应该只在127.0.0.1上侦听

没有.

我误解了java.rmi.server.hostname控制的内容吗?

是.java.rmi.server.hostname与远程对象侦听的IP地址没有任何关系.这是由RMIServerSocketFactory.

在另一个答案(随后删除)中纠正我的书中的错误引用:

java.rmi.server.hostname:主机名字符串; 默认值是本地主机的"dotted-quad"格式的IP地址...当导出远程对象时,它嵌入到由此JVM创建的远程存根中.这可用于控制多宿主主机导出的RMI服务器的有效IP地址.此属性在JVM的生命周期中只读取一次.[1]

为了扩展它,它还可以用于控制NAT设备后面的主机导出的RMI服务器的有效IP地址(由客户端看到).它不一定与本地主机有任何关系,例如在NAT情况下,它可以是主机名,点分四IPv4地址或IPv6地址.

[1]皮特&McNiff,java.rmi中,所述远程方法调用指南,阿狄森Wesley,2001年,第258页.