На локальном хосте, как мне выбрать номер порта?

Я пытаюсь играть с межпроцессорной связью, и поскольку я не мог понять, как использовать именованные каналы под Windows, я думал, что буду использовать сетевые сокеты. Все происходит локально. Сервер может запускать ведомые устройства в отдельном процессе и прослушивать некоторые порты. Рабы выполняют свою работу и передают результат мастеру. Как узнать, какой порт доступен? Я предполагаю, что не могу слушать порт 80 или 21?

Я использую Python, если это сокращает выбор.

Благодаря!

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

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

Ради fragmentа того, что ребята объяснили выше:

 import socket from contextlib import closing def find_free_port(): with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s: s.bind(('', 0)) return s.getsockname()[1] 

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

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

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

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

Давайте будем гением компьютера.