在ubuntu笔记本电脑上启动RMI服务器

在ubuntu笔记本电脑上启动RMI服务器,ubuntu,macos,rmi,Ubuntu,Macos,Rmi,我编写了一个服务器客户端rmi应用程序,我正在使用MacOsX和Ubuntu笔记本电脑对它们进行测试 当我在MacOsX上启动rmiregistry和服务器时,我可以在netstat中看到端口1099已打开并已使用的详细信息。 然后,如果我尝试使用RMI,使用Ubuntu笔记本电脑上的客户机,它工作得很好 然而,当我以另一种方式尝试时: 在Ubuntu上启动注册表和服务器,我在netstat中看不到关于1099端口的任何详细信息。 而且,当从Macos使用客户端时,我无法连接到它,并收到以下异常

我编写了一个服务器客户端rmi应用程序,我正在使用MacOsX和Ubuntu笔记本电脑对它们进行测试

当我在MacOsX上启动rmiregistry和服务器时,我可以在netstat中看到端口1099已打开并已使用的详细信息。 然后,如果我尝试使用RMI,使用Ubuntu笔记本电脑上的客户机,它工作得很好

然而,当我以另一种方式尝试时: 在Ubuntu上启动注册表和服务器,我在netstat中看不到关于1099端口的任何详细信息。 而且,当从Macos使用客户端时,我无法连接到它,并收到以下异常:

Received Exception: 
java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is: 
java.net.ConnectException: Operation timed out
这发生在Naming.lookup之后(因此查找进行得很好,但RMI本身没有)

看起来Ubuntu上的注册中心正在重定向我的客户端连接127.0.1.1,而不是服务器的外部IP,他拒绝这样做


原因可能是什么?

找到了两种解决方案,不知道哪一种是正确的:

  • 我检查了Ubuntu机器上的/etc/hosts,发现127.0.1.1被映射到了Ubuntu笔记本电脑的名称,所以我将其改写为正确的外部IP
  • 在那之后,它起了作用。然而,我认为拥有一个静态ip地址不是一个好主意(因为如果它会动态变化呢?)

  • 因此,这个问题的解决方法是在使用rmi.server.hostname属性启动服务器时指定主机名。所以会是这样的:
  • java-Djava.rmi.server.hostname=192.168.1.35服务器192.168.1.35


    在那之后,它就开始工作了。

    我被你的java参数弄糊涂了,对我来说,你的意思可能是在vm参数中添加
    -Djava.rmi.server.hostname=yourloclip