java.rmi.ConnectException: соединение отказало в хосте, когда сервер RMI является дочерним процессом клиента 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 ответ
так получилось, что мне нужна клиентская java-программа для порождения сервера и последующего подключения к нему
Зачем? В этом случае вам даже не нужен RMI, не говоря уже о второй JVM. Просто создайте удаленный объект в текущей JVM и вызовите его методы напрямую.
RMI сама ничего не знает об отношениях между родителями и детьми, поэтому я бы не стал заниматься этим вопросом. Строка исключения "Соединение отказано в хосте: 0:0:0:0:0:0:0:1" крайне подозрительна. Где вы взяли заглушку для удаленного объекта? Вот откуда исходит цель подключения.