Есть ли способ узнать номер порта как клиента, так и сервера во время RMI?
Если я не ошибаюсь, я думаю, что невозможно узнать номер порта во время сеанса RMI.
Если у вас есть номер порта, отличный от порта 1099 сервера реестра RMI по умолчанию, вы должны установить его в классе сервера и в классе клиента, потому что, поскольку страница Oracle RMI сообщает:
Если реестр будет работать на порту, отличном от 1099, вам потребуется указать номер порта в вызовах LocateRegistry.getRegistry в классах Server и Client. Например, если в этом примере реестр работает на порту 2001, вызов getRegistry
на сервере будет выглядеть так:
Registry registry = LocateRegistry.getRegistry(2001);
а также:
Этот клиент сначала получает заглушку для реестра, вызывая статический метод LocateRegistry.getRegistry с именем хоста, указанным в командной строке. Если имя хоста не указано, то в качестве имени хоста используется null, указывающий, что следует использовать локальный адрес хоста.
Тогда мой вывод состоит в том, что вы не можете узнать с помощью метода номер порта сеанса RMI (подробности вы можете проверить в RMI API), за исключением случаев, когда вам нужно его установить, если он отличается от RMI по умолчанию. порт реестра 1099 сервера, потому что вы должны знать его в начале сеанса RMI.
Просто подумайте: как вы можете получить этот номер порта? Связь с сервером или клиентом? Например, если вы запрашиваете страницу, расположенную на определенном Сервере, который прослушивает порт 81 (а не порт 80 по умолчанию), вам необходимо заранее указать номер порта для подключения к этому конкретному Серверу, связавшись с ним, например, по адресу: http://192.168.1.1:81
. Затем во время сеанса RMI вы должны заранее знать порт реестра RMI.
Проверьте эту страницу для подробности.
Когда результат возвращается во время RMI клиенту, в следующий раз, когда клиент запрашивает результат, диалог между клиентом и сервером будет на том же порту, что и предыдущий, когда сервер работал с момента возврата первого результата или новый порт создан?
Когда результат возвращается клиенту, обмен данными между Клиентом и Сервером должен осуществляться через один и тот же порт реестра RMI, в противном случае, если порт реестра RMI, установленный в клиенте, отличается от порта реестра RMI сервера (если я не забыл), код выдаст RemoteException
, что может произойти при сбое в процессе RMI.
ОБНОВЛЕНИЕ
Теперь я вижу ваш обновленный вопрос.
В двух разных вызовах остается ли номер порта клиента и сервера одинаковым?
Это должен быть тот же порт сервера реестра RMI. Когда ваша программа завершает работу после первого вызова, она закрывает сокетное соединение. При следующем запуске программы порт реестра RMI должен быть таким же. В противном случае ваша программа должна выдать исключение, или при передаче аргументов программе вы получите неожиданный результат. Насколько я понял, ваша клиентская программа просто вызывает метод суммы на Сервере. После первого результата при следующем запуске программы вы получите другой результат? Если нет, я думаю, что порт реестра RMI такой же.
person
Alberto Solano
schedule
21.12.2011
java AddClient localhost 100 200
. Метод на сервере возвращает300
, и клиент завершает работу. В следующий раз я снова запущу свой клиент сjava AddClient localhost 19 100
. Теперь запрос будет отправляться с того же порта, что и раньше, и будет ли сервер получать запрос на тот же порт? Или ситуация отличается от того, что я только что написал? - person Suhail Gupta   schedule 21.12.2011