Как мне создать HTTP-сервер в Python, используя первый доступный порт?
-
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 ... маловероятно, что кто-то будет его использовать.
Брандмауэры позволяют вам разрешать или запрещать трафик для каждого порта. Только по этой причине приложение без четко определенного порта должно ожидать возникновения всевозможных проблем при установке клиента. Р>
Я говорю, выберите произвольный порт и сделайте так, чтобы пользователю было легко изменить порт, если это необходимо. Р>
Вот хорошее место для известных портов .