如何设置客户端本地端点-Java RMI

时间:2019-05-18 20:28:20

标签: java rmi

因此,我在本地局域网上运行了一个非常基本的客户端-服务器程序。 该程序包括将服务器作为永久侦听器,并将连接到其IP的每个客户端添加到观察者列表,并每5秒更新一次(客户端扩展UnicastRemoteObject)。 问题是我不知道客户端为什么使用未知的IP地址创建引用。

这是我通常从客户端获得的信息,如果我输入System.out.println(this)

RmiClient[UnicastServerRef [liveRef: [endpoint:[192.168.56.1:64199](local),objID:[32218df3:16acc934a0a:-7fff, 8241015111525045915]]]]

我做了一些研究,发现ip地址属于我的VirtualBox Host-Only Newtork接口,所以当我禁用它时,我会得到正确的信息:

RmiClient[UnicastServerRef [liveRef: [endpoint:[192.168.1.3:64307](local),objID:[1b156947:16acc999fa5:-7fff, 6095931207093481175]]]]

这是我的局域网上这台机器的正确IP。 我的问题是如何在不永久禁用界面的情况下进行这项工作?
另外,如果我将服务器和客户端设置在不同的机器上,则服务器尝试更新客户端时会收到RemoteException,因为它尝试联系192.168.56.1并显然失败。

1 个答案:

答案 0 :(得分:-1)

解决了!问题在于客户端扩展了UnicastRemoteObject。 显然,我必须在客户端和服务器应用程序中都设置属性java.rmi.server.hostname,但是在由于扩展而无法使用的客户端中。 因此,我设法通过消除扩展名并添加以下代码来解决: UnicastRemoteObject.exportObject(this, port);
这样,属性就可以在客户端上正常工作。