Как мне создать HTTP-сервер в Python, используя первый доступный порт?

StackOverflow https://stackoverflow.com/questions/442062

  •  22-07-2019
  •  | 
  •  

Вопрос

Я хочу избежать жесткого кодирования номера порта, как показано ниже:

httpd = make_server('', 8000, simple_app)

Причина, по которой я создаю сервер таким образом, заключается в том, что я хочу использовать его в качестве «ядра» для приложения Adobe AIR, чтобы оно взаимодействовало с использованием PyAMF. Так как я запускаю это на стороне клиента, вполне возможно, что любой определенный мной порт уже используется. Если есть лучший способ сделать это, и я задаю неправильный вопрос, пожалуйста, дайте мне знать.

Это было полезно?

Решение

Проблема в том, что вам нужен известный порт для использования приложением. Но если вы укажете номер порта 0, я думаю, ОС предоставит вам первый доступный неиспользуемый порт.

Другие советы

  

Проблема в том, что вам нужен известный порт для использования приложением. Но если вы укажете номер порта 0, я думаю, ОС предоставит вам первый доступный неиспользуемый порт.

Вы правы, сэр. Вот как это работает:

>>> import socket
>>> s = socket.socket()
>>> s.bind(("", 0))
>>> s.getsockname()
('0.0.0.0', 54485)

Теперь у меня есть сокет, привязанный к порту 54485.

Является ли make_server функцией, которую вы написали? В частности, вы обрабатываете код, который создает сокеты? Если вы это сделаете, должен быть способ, при котором вы не указываете номер порта (или вы указываете 0 в качестве номера порта), и ОС выберет для вас доступный номер.

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

Брандмауэры позволяют вам разрешать или запрещать трафик для каждого порта. Только по этой причине приложение без четко определенного порта должно ожидать возникновения всевозможных проблем при установке клиента.

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

Вот хорошее место для известных портов .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top