Java RMI连接使用什么端口?

kwc*_*kwc 18 java connection firewall rmi

我可以知道Java RMI连接使用了哪个端口?

如果我想使用RMI连接将Java客户端应用程序连接到Java服务器应用程序,我需要在服务器计算机上打开哪个端口,以便客户端应用程序可以连接到它?

我想在服务器机器中设置防火墙,但我不知道应该打开哪个端口.

ska*_*man 23

RMI通常不能在防火墙上工作,因为它使用不可预测的端口(它从1099开始,然后在随后的端口运行).

在这些情况下,您通常需要通过HTTP隧道传输RMI,这在此处有详细描述.

  • 时间已经超过了这个anser一点,如果你在Java 7更新4有希望与标志``-Dcom.sun.management.jmxremote.rmi.port = 7091``看到这篇博文:http:// hirt .SE /博客/?p = 289 (8认同)
  • 这个链接已经死了 (7认同)

use*_*421 12

到目前为止所有答案都是不正确的.注册表通常使用端口1099,但您可以更改它.但这不是故事的结局.远程对象也使用端口,不一定是1099.

如果在导出时未指定端口,则RMI使用随机端口.因此,解决方案是在导出时指定端口号.这是一个需要在防火墙中打开的端口,如果有的话.

  • 在远程对象扩展的情况下UnicastRemoteObject,让其构造函数调用super(port)一些非零端口号.

  • 在不扩展的情况下UnicastRemoteObject,提供非零端口号UnicastRemoteObject.exportObject().

这有几个皱纹.

  • 如果您不使用套接字工厂,并且在导出第一个远程对象时提供非零端口号,则RMI将自动与后续导出的远程对象共享该端口,而不指定端口号或指定零.第一个远程对象包括使用LocateRegistry.createRegistry().So 创建的注册表.如果您创建一个Registryon端口1099,从该JVM导出的所有其他对象可以共享端口1099.

  • 如果您正在使用套接字工厂并且您RMIServerSocketFactory有合理的实现equals(),则同样适用于上述情况.

  • 在这两种情况下,您可以为所有远程对象使用相同的非零显式端口号,例如createRegistry(1099)后跟任意数量的super(1099)exportObject(..., 1099)调用.


Kai*_*nad 10

在RMI中,关于端口,涉及两种不同的机制:

1)默认情况下,RMI注册表使用端口1099

2)客户端和服务器(存根,远程对象)通过随机端口进行通信,除非在导出远程对象时指定了固定端口.通信是通过套接字工厂启动的,它使用0作为起始端口,这意味着"使用0到65535之间可用的任何端口".

  • 是和否,请参阅http://stackoverflow.com/questions/1706685/java-rmi-client-side-random-ports以获取更多详细信息. (2认同)