2014-12-23 5 views
1

Я пытаюсь создать простой сервер python, к которому клиент может подключиться, без того, чтобы клиент знал точный номер порта. Возможно ли это? Мысль - выбрать случайный номер порта и использовать его для подключения клиентов.Как дать клиенту python номер порта с сервера python

Я знаю, что вы можете использовать bind (host, 0) для получения случайного номера порта и socket.getsockname() [1] на сервере для получения моего номера порта. Но как мой клиент получит номер порта?

Я пробовал socket.getnameinfo(), но я не думаю, что понимаю, как этот метод действительно работает.

ответ

1

Для этого сервер должен прослушивать определенный порт (ы). Это означает, что клиенту (-ам) необходимо будет взаимодействовать с этими портами вместе с ним.

Итак ... нет, это невозможно сделать в каком-то случайном неизвестном порту.

0

Необходимо каким-то образом сообщить номер порта. Хотя DNS не делает этого (ну, возможно, вы могли бы приготовить некоторую запись ресурса на объекте сервера, но это на самом деле не сделано) существует множество сетевых сервисов. LDAP, как активный каталог (вам нужны права на запись), обнаружение службы DNS-SD dns, универсальный подключи и работай, протокол определения местоположения, все приходят на ум. Вы даже можете записать номер порта на какой-либо веб-странице и прочитать его клиенту.

+0

но это не случайно ... клиент хочет подключиться к произвольному порту – c0deMonk3y

+0

@ c0deMonk3y - клиент не подключается к случайному порту. Сервер выбирает порт случайно, а затем рекламирует его. Клиент читает рекламу и подключается достаточно точно к одному порту, предоставленному сервером. – tdelaney

+0

Это может быть очень хорошо, как это работает традиционно. Однако OP спросил о клиенте, который не знает, на каком порту сервер слушает. – c0deMonk3y

0

Посмотрите на Zeroconf, это, кажется, путь туда, куда вы пытаетесь добраться.