Соединение Java RMI с локальным узлом в домашней сети не может найти правильный удаленный модуль - PullRequest
2 голосов
/ 14 февраля 2012

Я работал над этим проектом, где два модуля на разных машинах должны обмениваться данными через RMI.

Я запускаю клиентские и серверные модули на своем ноутбуке.RMI, кажется, работает правильно, когда я нахожусь на работе и подключен к рабочей сети, но когда я дома, подключен к моей домашней сети, он не работает.В нем говорится, что удаленный объект не может быть найден.

Вот метод, который я использую на стороне КЛИЕНТА, чтобы получить ссылку на удаленный объект

public static MyRMIApp getRemoteApp() throws RemoteException, NotBoundException, AccessException {
    Registry registry = LocateRegistry.getRegistry("localhost", 28999); // tried 127.0.0.1 instead of localhost here, still not working
    MyRMIApp app = (MyRMIApp) registry.lookup("COM");
    return app;
} 

Выкапывая немного с некоторой отладкой, когда япроверьте значение объекта, возвращаемое методом getRemoteApp, оно показывает, что конечная точка - 67.215.65.132.Какой openDNS я использую для подключения к интернету.Разве это не должно быть 127.0.0.1?

Потом я воспользовался мобильным интернетом и попробовал еще раз.Кажется, он работает, но конечная точка - это не 127.0.0.1, опять же, это назначенный мне адрес, а именно 192.168.xx

Так может кто-нибудь сказать, что я делаю здесь неправильно?Я действительно был бы признателен за помощь.

Да, и это кусок кода на стороне SERVER

//Somwhere up top
private final static MyRMIApp rmiApp = new RMIServer();

//Down below
MyRMIApp stub = (MyRMIApp) UnicastRemoteObject.exportObject(rmiApp, 0);
        Registry registry = LocateRegistry.createRegistry(28999);
        registry.rebind("COM", stub);

1 Ответ

2 голосов
/ 15 февраля 2012

См. Пункт A.1 RMI FAQ : в частности, «Подходящий обходной путь - установить системное свойство java.rmi.server.hostname при запуске сервера».

...