繁体   English   中英

java.rmi.ConnectException:当RMI服务器是RMI客户端的子进程时,连接被拒绝托管

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

我有两个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线程中实例化。 在RMIServer注册远程对象之前实例化的RMIClient类,因此出现此异常。

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

碰巧我需要客户端Java程序来生成服务器,然后连接到它

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

RMI本身完全不了解父母/子女的关系,因此我不会继续进行调查。 异常字符串“拒绝连接到主机:0:0:0:0:0:0:0:1”非常可疑。 您从哪里获得了远程对象的存根? 这就是连接目标的来源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM