RMI RemoteException

Какая-либо идея, почему я получаю RemoteException при попытке вызвать методы на машину Unix из Windows?
Я в сети и не думаю, что это из-за проблемы с брандмауэром, поскольку я могу сделать "telnet" от Windows до поля Unix после запуска сервера RMI в поле Unix. Я также не мог понять, почему это идет в локальный петлевой IP?

Отслеживание стека:

RemoteException occured, details java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is: 
    java.net.ConnectException: Connection refused: connect
java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is: 
    java.net.ConnectException: Connection refused: connect

Заранее большое спасибо.

6
задан Reinstate Monica iamnotmaynard 27 December 2013 в 17:41
поделиться

1 ответ

Вероятно, у вас неправильно настроено имя хоста на вашей Linux-машине. Готов поспорить, что если вы ping $(hostname) с вашего Linux бокса, он будет ping 127.0.0.1. Обычно это происходит из-за записи в файле /etc/hosts.

Есть несколько способов решить эту проблему. Трудный способ заключается в том, чтобы заставить ваш Linux-компьютер правильно преобразовывать собственное имя хоста в IP-адрес. Вы можете отредактировать файл /etc/hosts, настроить DNS-сервер, что угодно. Проблема в том, что хотя это может сделать все технически более корректным, вы рискуете сломать те вещи, которые полагались на старое поведение.

Путь наименьших изменений - установить системное свойство java.rmi.server.hostname в имя хоста или IP-адрес вашей Linux-машины. (т.е. java -Djava.rmi.server.hostname=$(hostname) ... ).

Почему?

Сервер регистрации Java RMI на самом деле является сервером регистрации в сети. Объекты на других машинах могут связывать себя с этим реестром.

Когда удаленный объект регистрируется, регистрация включает в себя сетевой адрес как часть регистрации. По умолчанию используется "IP-адрес локального узла в формате "точка-четверка"". В вашей установке этот адрес - 127.0.0.1.

Когда ваш блок Windows обращается к службе регистрации за адресом удаленного объекта, он получает ответ 127.0.0.1. Затем он пытается связаться с удаленным объектом по этому адресу. Поэтому он обращается к адресу loopback.

12
ответ дан 9 December 2019 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: