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

时间:2011-10-26 02:27:41

标签: 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连接。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

  

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

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

RMI本身完全没有意识到父/子关系,因此我不会进行这样的调查。异常字符串'Connection refused to host:0:0:0:0:0:0:0:1'非常可疑。你从哪里获得远程对象的存根?这就是连接目标的来源。