java.rmi.ConnectException : Connection refused to host when RMI server is child process of RMI client

标签 java rmi

我有两个 Java 程序 - RMIServer 和 RMIClient。如果我将它们作为两个单独的 Java 调用启动,一切都会按预期工作。那就是

$ java -cp someclasspath server.mainserverclass &

$ java -cp someclasspath client.mainclientclass

但是在我的项目中,碰巧我需要客户端java程序来生成服务器然后连接到它。我使用了 runtime.exec() 方法和 ProcessBuilder 来生成服务器实例,但是当我这样做时,我得到以下结果:

.Exception in thread "main" java.rmi.ConnectException:  
    Connection refused to host: 0:0:0:0:0:0:0:1; nested exception is:

但有趣的是,如果手动终止 RMIClient 实例,RMIServer 就会被孤立(父级为 pid:1),然后如果我运行 RMIClient,我可以连接到孤立的 RMI 服务器很好!

因此,当 RMIServer 和 RMIClient 具有父子关系时,我无法通过 RMI 进行连接。

非常感谢任何帮助/指示。

*****ANSWER*****(显然我没有足够的声誉来回答我自己的问题:-)

这是我的错误。 RMIServer 和 RMIClient 类在两个单独的 Java 线程中实例化。 RMIClient 类在 RMIServer 注册远程对象之前实例化,因此出现此异常。

父子关系与这个问题无关。碰巧这些类的创建顺序是问题的根本原因。

最佳答案

it so happens that I need the client java program to spawn the server and then connect to it

为什么?在这种情况下,您甚至不需要 RMI,更不用说第二个 JVM 了。只需在当前JVM中创建远程对象并直接调用其方法即可。

RMI 本身完全不知道父/子关系,所以我不会继续进行这种调查。异常字符串“连接拒绝托管:0:0:0:0:0:0:0:1”非常可疑。您从哪里获得远程对象的 stub ?这就是连接目标的来源。

关于java.rmi.ConnectException : Connection refused to host when RMI server is child process of RMI client,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7898120/

相关文章:

Java rmi,区分多个客户端

java - 从 'remote' 异常中的通用异常链工具中排除

java - 打印 float

java - Comparator 在域驱动的 MVC 世界中处于什么位置?

Java RMI第一次调用很慢

java - 如何指定方法 AnyObject<? super T,字符串>

java - 如何使用 R2dbc 将 jsonb 从 Postgresql 提取到 Spring webflux

java - RMI 中的骨架对象是什么时候创建的?

java - RMI 服务器自行关闭

java rmi - 访问被拒绝 ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")