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

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

httpd = make_server('', 8000, simple_app)

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

Ответы [ 4 ]

7 голосов
/ 14 января 2009

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

6 голосов
/ 14 января 2009

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

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

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

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

2 голосов
/ 14 января 2009

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

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

0 голосов
/ 14 января 2009

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

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

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

...