Есть ли способ узнать номер порта как клиента, так и сервера во время RMI?
Если я не понял неправильно, я думаю, что нет способа узнать номер портаво время сеанса RMI.
Если номер порта отличается от порта сервера 1099 реестра RMI по умолчанию, его необходимо установить для класса Server и класса Client, поскольку в качестве Страница Oracle RMI отчеты:
Если реестр будет работать на порте, отличном от 1099, вам нужно будет указать номер порта в вызовах LocateRegistry.getRegistry на сервереи клиентские классы.Например, если в этом примере реестр работает на порте 2001, вызовом getRegistry
на сервере будет:
Registry registry = LocateRegistry.getRegistry(2001);
и:
Этот клиент сначала получает заглушку для реестра, вызывая статический метод LocateRegistry.getRegistry с именем хоста, указанным в командной строке.Если имя хоста не указано, то в качестве имени хоста используется нуль, указывающий на то, что следует использовать адрес локального хоста.
Тогда я пришел к выводу, что вы не можете узнать с помощью метода портномер сеанса RMI (подробности можно найти в API RMI), за исключением случаев, когда его необходимо установить, если он отличается от порта сервера 1099 реестра RMI по умолчанию, поскольку его необходимо знать в начале сеанса RMI,
Только подумайте: как вы можете получить этот номер порта?Связаться с сервером или клиентом?Например, если вы запрашиваете страницу, расположенную на определенном сервере, который прослушивает порт 81 (а не порт 80 по умолчанию), вам необходимо заранее указать номер порта для подключения к этому конкретному серверу, связавшись с ним, например, по:http://192.168.1.1:81
.Затем во время сеанса RMI вы должны заранее знать порт реестра RMI.
Подробнее см. На этой странице .
Когда результат возвращается во время RMIклиенту, в следующий раз, когда клиент запросит результат, будет ли диалог между клиентом и сервером на том же порту, что и предыдущий, когда сервер работал с момента возврата первого результата или создания нового порта?
Когда результат возвращается клиенту, диалог между клиентом и сервером должен совместно использоваться на одном и том же порте реестра RMI, в противном случае, если порт реестра RMI, установленный на клиенте, отличается от порта реестра сервера RMI(если я не забыл), код выдаст RemoteException
, что может произойти при сбое в процессе RMI.
ОБНОВЛЕНИЕ
СейчасЯ вижу ваш обновленный вопрос.
В двух разных вызовах номер порта клиента и сервера остается одинаковым?
Это должно бытьтот же порт сервера регистрации RMI.Когда ваша программа завершает работу после первого вызова, она закрывает сокетное соединение.При следующем запуске программы порт реестра RMI должен быть таким же.В противном случае ваша программа должна выдать исключение, или, когда вы передадите свои аргументы программе, вы получите неожиданный результат.Если я понял, ваша клиентская программа просто вызывает метод суммы на сервере.После первого результата, при следующем запуске программы, вы получите другой результат?Если нет, то я думаю, что порт реестра RMI тот же.