有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何设置客户端本地端点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主机专用的NewWork接口,所以当我禁用它时,我会得到正确的信息:

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

哪一个是我局域网上这台机器的正确ip。 我的问题是,如何在不永久禁用接口的情况下实现这一点
另外,如果我在不同的机器上设置服务器和客户机,当服务器试图更新客户机时,我会得到一个RemoteException,因为它试图联系192.168.56.1,但显然失败了


共 (1) 个答案

  1. # 1 楼答案

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