互联网上的Java RMI连接

时间:2017-09-19 14:18:08

标签: java rmi rmiregistry

我试图从托管在不同网络上的服务器获取远程对象。我可以在同一台机器和同一网络上连接,但当我尝试从不同的网络上获取它时,我得到:

  

连接拒绝主持人:192.168.1.131;嵌套异常是:java.net.ConnectException:连接超时:连接

似乎查找功能正在错误的网络中搜索。我尝试使用System.setProperty,但它不起作用。代码如下:

服务器

 public class Main {

    public static void main(String[] args) {
        try{
            System.out.println("Init server...\n");
            TestInterface test = new TestImplement();


            System.setProperty("java.rmi.server.hostname", "95.247.x.x");
            System.out.println("Reg RMI...\n");
            Registry rmiRegistry = LocateRegistry.createRegistry(5555);
            rmiRegistry.rebind("Test" , test);
            System.out.println("Reg completed!\n");
            }catch(Exception e){
                e.printStackTrace();
            }
        }

}

客户端

...
registryRMI = LocateRegistry.getRegistry("95.247.x.x",5555);
TestInterface testClient = (TestInterface)registryRMI.lookup("Test");
...

我是否还需要在客户端jar中设置java.rmi.server.hostname

1 个答案:

答案 0 :(得分:0)

TestInterface test = new TestImplement();
System.setProperty("java.rmi.server.hostname", "95.247.x.x");

您需要在导出任何远程对象之前设置java.rmi.server.hostname 。之后这样做太晚了。

System.setProperty("java.rmi.server.hostname", "95.247.x.x");
TestInterface test = new TestImplement();