Java RMI与本地主机在家网络的连接可以';找不到正确的远程模块

Java RMI与本地主机在家网络的连接可以';找不到正确的远程模块,java,registry,localhost,rmi,Java,Registry,Localhost,Rmi,我一直在从事这个项目,不同机器上的两个模块需要通过RMI进行通信 我在笔记本电脑上启动客户端和服务器模块。当我在工作并连接到工作网络时,RMI似乎工作正常,但当我在家,连接到家庭网络时,RMI不工作。它说找不到远程对象 下面是我在客户端用来获取远程对象引用的方法 public static MyRMIApp getRemoteApp() throws RemoteException, NotBoundException, AccessException { Registry regist

我一直在从事这个项目,不同机器上的两个模块需要通过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);

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

我不确定,但我建议您尝试更改远程对象导出到的端口号,因为0是一个众所周知的端口号,其他一些服务可能已经在侦听它。只需将其更改为1023以上的值。好的,按照您的建议执行,尝试使用端口1112,但仍然相同。该值是Proxy[MyRMIApp,RemoteObjectInvocationHandler[UnicastRef[liveRef:[endpoint:[67.215.65.132:1112](remote),objID:[2723e75d:1357d203dd7:-7fff,-8442143534524841902]。][][3]。当然,异常是:线程“main”java.rmi.ConnectException中的异常:连接拒绝宿主:67.215.65.132;嵌套的例外情况是:你能给我发送完整的源代码吗。我想自己调试它。我还发现了这个链接,人们似乎正在讨论与您相同的问题:。然而,我没有看到任何解决方案。现在我检查了你给我的链接,在VM参数中添加了-java.rmi.server.hostname=localhost。当localhost:53886并且代码正常工作时,它确实正确地得到了终点。我在链接中检查了这个rmi属性java.rmi.server.hostname,它说默认情况下,rmi注册表返回分配给我的ip地址。我明白为什么我在其他网络上得到我的ip地址,但仍然不明白为什么我在家庭网络上得到openDNS。现在我可以在家里的局域网上工作了。我仍然想知道为什么它会这样工作。我猜在如何将本地主机解析为ip地址方面可能存在问题。可能是注册表试图使用openDns解析localhost,但openDns返回的是它自己的一个服务器的ip,而不是127.0.0.1。看看这个与解决问题相关的线程,尽管它与rmi无关-