Динамично выбирающий номер порта?

В Java я должен захватить номер порта для коммуникации между несколькими экземплярами той же программы. Теперь, я мог просто выбрать некоторое постоянное число и пойти с ним. Но я задаюсь вопросом, существует ли способ динамично выбрать номер порта, так, чтобы я не беспокоил своих пользователей установкой номера порта.

Вот одна идея, которую я имел, который работает как это:

  • Существует фиксированный номер начального порта A.
  • Программа 'MyApp' запускается, попытки захватить порт A.
  • Если это успешно выполняется, то это - первая инстанция 'MyApp'.Готово.
  • Если это перестало работать, это спрашивает по порту, является ли программа на A экземпляром 'MyApp'. Если да, общайтесь с тем экземпляром.Готово. В противном случае попытайтесь захватить порт A+1. И если существует другая программа с помощью того порта (не экземпляр 'MyApp' любой), то захватите A+2, то A+3, и так далее.

Эта стратегия имеет смысл? Или есть ли лучший способ динамично выбрать номер порта?

7
задан Chris Jester-Young 9 February 2010 в 18:43
поделиться

3 ответа

Если вы подключитесь к порту 0, Java будет использовать порт, сгенерированный системой. :-) Так что, вероятно, это самый простой способ отступить, если желаемый порт уже используется.

ServerSocket s = new ServerSocket(0);
int port = s.getLocalPort();    // returns the port the system selected
28
ответ дан 6 December 2019 в 05:48
поделиться

Я бы взял обратное и выбрал порт с фиксированным высоким значением для вашего приложения. Сделайте это значением конфигурации, чтобы его можно было изменить при необходимости. Это упростит настройку, поскольку часто пользователям приложений требуется запрашивать сетевые операции для открытия портов. Обойдите значения, присвоенные IANA:

http://www.iana.org/assignments/port-numbers

Сканирование портов может превратить ваше приложение в плохого человека для многих систем обнаружения вторжений.

3
ответ дан 6 December 2019 в 05:48
поделиться

Я бы взял обратный и выбрал фиксированный высокий порт для вашего приложения. Это упростит настройку так часто, когда пользователям приложений требуется запрашивать сетевые операции для открытия портов. Работа с назначенными IANA значениями:

http://www.iana.org/assignments/port-numbers

Сканирование портов может превратить ваше приложение в плохого гражданина для многих систем обнаружения вторжений.

-121--3770405-

Я бы сказал, используйте комбинацию хороших ответов и будьте разумны.

Полностью, ясно и понятно описать, что делает метод.

Если имя метода кажется слишком длинным - восстановите метод, чтобы сделать меньше.

-121--649396-

Bonjour/ ZeroConf можно использовать для рекламы услуг каждого экземпляра и для поиска других. Рассмотрим это как службу каталогов , которая может помочь в управлении пространством имен портов.

В этом случае каждый экземпляр может просто захватить динамически назначенный порт. Запрос на привязку к порту «0» обычно предписывает системе назначить динамический порт.

1
ответ дан 6 December 2019 в 05:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: