Программа сетевого общения на питоне

По сути, я пытаюсь создать программу, которая позволяет пользователям подключаться друг к другу по сети, по сути, в чате. В настоящее время я борюсь с написанием кода, чтобы пользователи могли подключаться друг к другу, не зная IP-адреса компьютера, который используют другие пользователи, или зная IP-адрес сервера.

Кто-нибудь знает способ, которым я мог бы просто заставить всех пользователей сканировать диапазон IP-адресов моей сети, чтобы найти любую активную «комнату», а затем дать пользователю возможность подключиться к ней?

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


person user360968    schedule 08.06.2010    source источник


Ответы (1)


Я могу дать вам два предложения. Во-первых, UDP-пакеты на широковещательный адрес вашей сети будут приниматься всеми. Во-вторых, есть протокол, позволяющий программам, предлагающим определенные услуги, находить друг друга в локальной сети. Этот протокол называется mDNS, ZeroConf или Bonjour.

Использование широковещательного UDP, вероятно, будет более быстрым маршрутом. Но на вашем месте я бы научился использовать ZeroConf. Он хорошо поддерживается в IPv6 и уже используется несколькими интересными программами, такими как SubEthaEdit и Гобби.

Вот ссылка на хорошее руководство по реализации того, что говорит на языке ZeroConf в Python.

Еще одна рекомендация... Если вы хотите вручную свернуть свой собственный UDP-код широковещательной/многоадресной рассылки и можете быть уверены, что все системы, на которых вы работаете, работают под управлением Linux новее 2003 года или около того, а все системы Windows - XP или лучше, вы, вероятно, можете обойтись без использования IPv6. Адрес многоадресной рассылки для всех узлов IPv6 link-local (думаю, что это одна и та же локальная сеть) — ff02::1. Это действительно просто и легко, и оно будет доступно для всех других систем в той же локальной сети. Это намного лучше, чем выяснять, какой у вашей сети широковещательный адрес с IPv4.

person Omnifarious    schedule 08.06.2010
comment
Позвольте мне добавить, что, хотя архив sourceforge pyzeroconf, ссылка на который приведена в этом руководстве, содержит ошибки и, похоже, был заброшен, над ним велась недавняя работа здесь: launchpad.net/pyzeroconf Кроме того, в наши дни этот протокол встроен почти во все компьютеры Mac, Linux и основные сетевые принтеры. - person ʇsәɹoɈ; 08.06.2010
comment
Спасибо за чрезвычайно быстрый ответ, одна из областей, в которую я надеюсь расширить это приложение, будет заключаться в передаче файлов по сети другим пользователям. Вы не знаете, легко ли это будет интегрировать с программой, использующей ZeroConf? - person user360968; 08.06.2010
comment
ZeroConf — это чисто сервисный механизм рекламы и поиска. Это будет полностью независимо от вашего приложения, за исключением разрешения экземплярам вашей программы находить номера IP/портов друг друга. Кроме того, он не очень хорошо поддерживается в Windows (не встроен, как в Mac/Linux), поэтому, если вы ориентируетесь на эту платформу, вы можете рассмотреть возможность использования широковещательного UDP напрямую (это то, что использует ZeroConf, но это стандарт и многое другое). дружественный интерфейс) - person Rakis; 08.06.2010
comment
@lamnep: Как отметил @Rakis, ZeroConf существует для того, чтобы ваши программы могли находить друг друга. Что они делают, как только узнают друг о друге и связаны, — это их дело. - person Omnifarious; 08.06.2010