[英]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.