2013-08-24 1 views
0

У меня есть сервер rmi на коробке с двумя общими интерфейсами. Когда клиент подключается, он всегда возвращает неправильный IP-адрес в UnicastServerRef2 [liveRef: [endpoint:[192.x.x.x:xxxx .... Соединение с клиентом переходит на другой интерфейс с ip 10.x.x.x. Кто-нибудь знает, как это решить? Я не хочу указывать ip при привязке заглушки. Он работает тогда, но я бы хотел, чтобы он прослушивал все интерфейсы (0.0.0.0).Укажите адрес конечной точки RMI при наличии двух интерфейсов

Если я указываю java.rmi.server.hostname=myhostname и использовать RMIServerSocketFactory создать ServerSocket[addr=myhostname/10.x.x.x,localport=xxxx], она по-прежнему возвращает 192.x.x.x адрес клиенту в качестве удаленной конечной точки. Довольно странно, у меня есть два объекта UnicastRemoteObjects на разных портах, и один из них возвращает правый адрес, а другой нет.

Любые идеи, как заставить его вернуть конечную точку с интерфейсом ip интерфейса, к которому было выполнено соединение?

ответ

3

Это свойство java.rmi.server.hostname. Установите его на экспортирующую JVM на любой IP-адрес, который вы хотите, чтобы клиенты использовали для подключения к нему.

+0

Спасибо за ваш ответ! Но я хотел бы автоматически вернуть ip интерфейса, который использует клиент. Так что у меня могут быть клиенты, которые используют локальный сетевой адрес, а другие - через Интернет. Или, по крайней мере, я хотел бы указать только имя хоста, установленное в/etc/hosts, без необходимости явно устанавливать ip в приложении. – morja

+0

Хорошо, на самом деле это работает с именем хоста. Проблема заключалась в том, что я установил java.rmi.server.hostname перед привязкой к заглушке, но после создания UnicastRemoteObject. Спасибо за Ваш ответ! – morja

+0

Хм, нет, извините, его все еще не работает. По какой-то причине он работает для одного соединения, но другой по-прежнему получает неправильный IP-адрес. – morja

Смежные вопросы