我正在研究Java RMI。可以在localhost中注册一个注册表。但是,如何在具有指定端口的远程主机中注册注册表?

可以像下面这样执行代码

    LocateRegistry.createRegistry(6600);
    // Register communication route
    Naming.rebind("rmi://0.0.0.0:6600/PersonService", personService);


但是不喜欢

    LocateRegistry.getRegistry("202.114.70.31", 6600);
    // Register communication route
    Naming.rebind("rmi://202.114.70.31:6600/PersonService", personService);


否则将抛出ConnectionException

最佳答案

如何在具有指定端口的远程主机中注册注册表?


你不能您只能在本地主机中启动注册表。


  可以像下面这样执行代码


LocateRegistry.createRegistry(6600);
// Register communication route
Naming.rebind("rmi://0.0.0.0:6600/PersonService", personService);


不好您无法连接到0.0.0.0。它应该是"localhost"


  但是不喜欢


LocateRegistry.getRegistry("202.114.70.31", 6600);


现在可以了。但是,LocateRegistry.getRegistry()不会创建注册表。它为您提供了现有注册表的存根,如果该注册表实际上不存在,则为空。并注意,调用不会失败,但使用该存根不会失败。

Naming.rebind("rmi://202.114.70.31:6600/PersonService", personService);


这不行。您只能绑定/重新绑定/取消绑定到在本地主机中运行的注册表。请参阅Javadoc。


  否则将抛出ConnectionException


不,会抛出java.rmi.ConnectException,并且由rebind()而不是由getRegistry().引发

10-05 19:11