На localhost, как выбрать номер свободного порта?

140
задан jeteon 9 November 2017 в 10:04
поделиться

3 ответа

Не привязывайтесь к определенному порту и не привязывайте к порту 0, например sock.bind (('', 0)) . Затем ОС выберет для вас доступный порт. Вы можете получить выбранный порт с помощью sock.getsockname () [1] и передать его подчиненным, чтобы они могли подключиться обратно.

211
ответ дан 23 November 2019 в 22:53
поделиться

Привязать сокет к порту 0. Будет выбран случайный свободный порт от 1024 до 65535. Вы можете получить выбранный порт с помощью getsockname () сразу после bind () .

38
ответ дан 23 November 2019 в 22:53
поделиться

Вы можете прослушивать любой порт, какой захотите; как правило, пользовательские приложения должны прослушивать порты с 1024 и выше (через 65535). Главное, если у вас есть переменное количество слушателей, - это выделить вашему приложению диапазон - скажем, 20000-21000 и CATCH EXCEPTIONS . Таким образом вы узнаете, что порт на вашем компьютере непригоден для использования (другими словами, используется другим процессом).

Однако в вашем случае у вас не должно возникнуть проблем с использованием одного жестко запрограммированного порта для вашего слушателя, если вы печатаете сообщение об ошибке, если связывание не удается.

Обратите внимание также, что большинство ваших сокетов (для ведомых устройств) не требуется явной привязки к конкретным номерам портов - только сокеты, которые ждут входящих соединений (например, ваш мастер здесь), должны быть сделаны слушателем и привязаны к порту. Если порт не указан для сокета до того, как он будет использован, ОС назначит сокету используемый порт. Когда мастер хочет ответить подчиненному устройству, которое отправляет ему данные, адрес отправителя доступен, когда слушатель получает данные.

Я полагаю, вы будете использовать для этого UDP?

2
ответ дан 23 November 2019 в 22:53
поделиться
Другие вопросы по тегам:

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