gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:37:39 26 4
gpt4 key购买 nike

我有两个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com