我正在研究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().
引发