我一直致力于这个项目,其中不同机器上的两个模块需要通过 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/