如何设置客户端本地端点 - Java RMI
How to set client local endpoint - Java RMI
所以我在我的本地 LAN 网络上有一个非常基本的客户端-服务器程序 运行。
该程序包括作为永久侦听器的服务器,将连接到其 ip 的每个客户端添加到观察者列表中,并每 5 秒更新一次(Client Extends 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 并且显然失败了。
已解决!问题在于客户端扩展 UnicastRemoteObject
。
显然,我必须在客户端和服务器应用程序中设置 属性 java.rmi.server.hostname
,但在客户端中由于扩展而无法正常工作。
所以我设法通过消除扩展并添加以下代码来解决:
UnicastRemoteObject.exportObject(this, port);
这样 属性 就可以在客户端正常工作了。
所以我在我的本地 LAN 网络上有一个非常基本的客户端-服务器程序 运行。 该程序包括作为永久侦听器的服务器,将连接到其 ip 的每个客户端添加到观察者列表中,并每 5 秒更新一次(Client Extends 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 并且显然失败了。
已解决!问题在于客户端扩展 UnicastRemoteObject
。
显然,我必须在客户端和服务器应用程序中设置 属性 java.rmi.server.hostname
,但在客户端中由于扩展而无法正常工作。
所以我设法通过消除扩展并添加以下代码来解决:
UnicastRemoteObject.exportObject(this, port);
这样 属性 就可以在客户端正常工作了。