更改默认的RMI端口(Java)

7

我该如何更改默认的RMI端口(1099)。可以通过JVM参数或编码方式进行更改,都可以。谢谢。


这里有一个编程解决方案。看起来你需要在所选端口上创建一个自定义注册表。编辑 - 刚刚重新阅读了你的问题:这不会更改默认端口,而是在端口1099上向现有注册表添加一个新的注册表。 - Andreas Dolk
2
1099是RMI注册表服务器端口,而不是RMI服务器端口。 - Vincent Robert
@VincentRobert 可以是两者都可以。 - user207421
2个回答

11

你可以在命令行中指定它。根据RMI教程:

默认情况下,注册表运行在端口1099上。要在不同的端口上启动注册表,请在命令行上指定端口号。不要忘记取消设置CLASSPATH环境变量。

Microsoft Windows:

start rmiregistry 2001

Solaris OS or Linux:

rmiregistry 2001 &

您的代码中使用了LocateRegistry.getRegistry(String host, int port) 方法来通过主机名和端口定位注册表,正如教程中的创建客户端程序一节所解释的那样。(实现服务器时同样适用。)


好的,你的意思是说无法更改rmiRegistry端口,但可以使用JVM的-D属性参数将rmiServer端口从1098更改为任何值? - djangofan
@djangofan:并不完全正确。您可以在命令行上更改rmiregistry端口(如上所示)。 - Bill the Lizard
@djangofan 他说的恰恰相反。 - user207421
好的,换句话说,除了在启动JVM之前通过命令行启动"rmiregistry.exe"的方法外,没有其他方式可以更改rmiRegistry端口吗? - djangofan
@djangofan 你没有认真阅读。他也没有说那个,而事实上:你可以通过 Locatearegistry.createaRgistry() 在 JVM 上的任何端口启动它。 - user207421

3

当导出远程对象时,您可以通过super(port, ...)或exportObject(remote, port, ...)指定自己的端口,具体取决于您是否扩展了UnicastRemoteObject。如果您扩展了Activatable,则有类似的带有端口号的super()重载。如果您使用Registry,可以在命令行上指定Registry的端口,否则可以通过LocateRegistry.createRegistry()指定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接