Java RMI 连接到家庭网络中的本地主机找不到正确的远程模块

标签 java registry localhost rmi

我一直致力于这个项目,其中不同机器上的两个模块需要通过 RMI 进行通信。

我在笔记本电脑上启动客户端和服务器模块。当我在工作并连接到工作网络时,RMI 似乎可以正常工作,但是当我在家,连接到我的家庭网络时,它不起作用。它说找不到远程对象。

这是我在客户端使用的方法来获取对远程对象的引用

public static MyRMIApp getRemoteApp() throws RemoteException, NotBoundException, AccessException {
    Registry registry = LocateRegistry.getRegistry("localhost", 28999); // tried 127.0.0.1 instead of localhost here, still not working
    MyRMIApp app = (MyRMIApp) registry.lookup("COM");
    return app;
} 

通过一些调试进行挖掘,当我检查从 getRemoteApp 方法返回的对象值时,它显示终点是 67.215.65.132。这是我用来连接互联网的 openDNS。那不应该是 127.0.0.1 吗?

然后我使用移动互联网并再次尝试。它似乎可以工作,但端点不再是 127.0.0.1,它是分配给我的地址,即 192.168.x.x

那么有人可以告诉我我在这里做错了什么吗?我真的很感激你的帮助。

哦,这是服务器端的代码

//Somwhere up top
private final static MyRMIApp rmiApp = new RMIServer();

//Down below
MyRMIApp stub = (MyRMIApp) UnicastRemoteObject.exportObject(rmiApp, 0);
        Registry registry = LocateRegistry.createRegistry(28999);
        registry.rebind("COM", stub);

最佳答案

请参阅 RMI FAQ 的项目 A.1 :具体来说,“适当的解决方法是在启动服务器时设置系统属性java.rmi.server.hostname。”

关于Java RMI 连接到家庭网络中的本地主机找不到正确的远程模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9280583/

相关文章:

java - 百分比相似度分析 (Java)

java - java float 可以按字节表示排序吗?

c# - 无法从现有键中读取值

c++ - 差异 : Environment Variables & Registry Keys

redis - 无法从外部 docker 连接到 dockerized redis 实例

macos - 为什么Apache拒绝在OSX上连接到localhost 127.0.0.1?

java - 查找时差

java - 使用 java 配置的不存在请求映射的拦截器

java - 在 x64 Windows 中有没有办法运行 Runtime.exec() 进程避免 'Registry redirection'

ssl - 如何更改本地主机 (XAMPP) 上 TLS 协议(protocol)的密码学方法?