微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决java rmi -Djava.rmi.server.hostname = localhost仍然打开监听0.0.0.0的套接字

我假设如果设置-Djava.rmi.server.hostname = localhost,则它应该仅在127.0.0.1上进行侦听

没有。

我是否误解了java.rmi.server.hostname的控件?

是。java.rmi.server.hostname与远程对象侦听的IP地址无关。那是由RMIServerSocketFactory.

要更正我书中另一个引用中的错误引用(后来删除):

java.rmi.server.hostname:主机名字符串;认值是本地主机的IP地址,其格式为“点分四进制”,当导出远程对象时,该IP地址将嵌入到此JVM创建的远程存根中。这可用于控制由多宿主主机导出的RMI服务器的有效IP地址。该属性在JVM的生命周期中仅读取一次。[1]

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

[1] Pitt&McNiff, java.rmi,《远程方法调用指南》, Addison Wesley 2001,第258页。

解决方法

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

奇怪的是,RMI RenewClean线程使用本地主机显示它。例如RMI RenewClean- [localhost:59357]

我假设如果设置 -Djava.rmi.server.hostname = localhost, 则它应该仅在127.0.0.1上进行侦听

我是否误解了java.rmi.server.hostname的控件?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。