Короче говоря - я пытаюсь запустить приложение RMI с клиентом и сервером на отдельных машинах с использованием Windows.
Упрощенный код на сервере:
System.setProperty("java.rmi.server.hostname", "192.168.x.x");
Registry reg = LocateRegistry.createRegistry(1099);
RemoteFoo foo = new RemoteFoo();
reg.rebind("Foo", foo);
У клиента у меня:
reg = LocateRegistry.getRegistry("192.168.x.x", 1099);
RemoteFooInterface foo = (RemoteFooInterface) reg.lookup("Foo");
Исключением, которое я получаю, является "Соединение отказалось от хоста: 192.168.xx; вложенное исключение - это время ожидания подключения: connect" в строке, где я просматриваю объект.
Я прочитал некоторый вопрос о StackOverflow у людей, имеющих аналогичную проблему, и именно поэтому я добавил строку, чтобы изменить свойство System, чтобы вставить правильный IP-адрес в заглушку, которую используют клиенты, но она по-прежнему не работает.
Я буду очень благодарен, если кто-то может дать мне несколько указаний о том, что еще я могу попробовать.
Возможно, брандмауэр на сервере блокирует доступ.
Убедитесь, что вы можете подключиться к порту в вашем случае 1099. Например, с вашего клиентского компьютера откройте командную строку cmd.exe
и введите telnet 192.168.xx 1099
(это будет подключение к порту 1099 на сервере). Если он говорит "Подключение к...", то этот порт недоступен, и очень вероятно, что клиентская машина не сможет связаться с сервером. Попробуйте выполнить ping 192.168.xx (он будет работать, если ICMP разрешен брандмауэром сервера).
Попробуйте установить брандмауэр, чтобы разрешить соединения через порт 1099 или лучше отключить его (временно) и повторить попытку. После очистки, запустите клиент RMI