通过互联网的 Java RMI 连接

标签 java rmi rmiregistry

我正在尝试从托管在不同网络上的服务器获取远程对象。我能够在同一台计算机和同一网络上进行连接,但是当我尝试从不同的网络获取它时,我得到:

Connection refused to host: 192.168.1.131; nested exception is: java.net.ConnectException: Connection timed out: connect

查找功能似乎在错误的网络中进行搜索。我尝试使用 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 吗?

最佳答案

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();

关于通过互联网的 Java RMI 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46302879/

相关文章:

java - RMI:检查客户端崩溃

java - 将方法保存为变量

java - neo4j 2.0 启动时遇到问题

java - 当有两个接口(interface)时指定 RMI 端点地址

java - 使用 ProcessBuilder 时客户端无法连接 RMI 注册表

java - 如何拒绝客户端解除RMI注册中心的绑定(bind)?

java - 使用 Spring Boot 和 Tomcat 提供前端内容

java - Spring Controller ,如何根据新的HttpRequest跳出循环?

java - 带屏障的进程间同步

java - 如果我的类(class)已经在扩展另一个类(class),如何使用 unicastremoteobject ...?