Программа сетевого общения на питоне - PullRequest
2 голосов
/ 08 июня 2010

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

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

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

1 Ответ

6 голосов
/ 08 июня 2010

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

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

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

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

...