Как я могу автоматически назначить свободный порт для сокетного соединения? - PullRequest
0 голосов
/ 08 октября 2019

Я использую Python для основной программы сокетов.

На стороне сервера:

port = 3135
c.bind('0.0.0.0',port)

На стороне клиента:

port = 3135
s.connect(('127.0.0.1', port))

Однако янеобходимо вручную изменять переменную port каждый раз, когда программа выдает OSError (когда порт не свободен)

Как автоматически выбрать свободный порт?

1 Ответ

2 голосов
/ 08 октября 2019

Документы Python, похоже, не упоминают об этом явно, но обычная процедура для этого с сокетами:

  1. Перед прослушиванием сервер привязывает свой сокет к порту 0,что заставляет систему выбирать свободный порт.

  2. Сервер вызывает getsockname, чтобы получить адрес, к которому привязан сокет, включая фактический номер порта

  3. Сервер каким-то образом публикует номер порта, где его могут видеть клиенты

  4. Клиенты затем подключаются к этому конкретному порту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...