簡體   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