Проблемы с чатом в Python

Я нашел код для приложения чата в Python, но я не могу найти ничего об авторе или о ком-либо на сайте, чтобы помочь мне с этим..

это ссылка на весь код: http://files.myopera.com/manojsheokand666/blog/chat.py

У меня возникает ощущение, что чего-то не хватает.. и мне это нужно, я хочу изменить это и попытаться узнать что-то еще

Я немного читал, и это мой третий раз, когда я редактировал этот пост. ТЕПЕРЬ, я могу оставаться на связи, не получая никакой ошибки, но когда я пытаюсь отправить (набрать) что-то, это не отправляет и не получает. Но всякий раз, когда я пытаюсь запустить второе приложение как другой "человек", я получаю сообщение о первом запущенном приложении, к которому подключился "человек", и первое приложение вылетает с этой ошибкой:

KeyError: ('127.0.0.1', 62833) - обратите внимание, порт всегда отличается

В то время как второе приложение остается, но оно ничего не получает или вылетает, если я снова запускаю приложение.

Что я сделал:

host = gethostbyname(gethostname()) #this actually gets 192.168.0.101 (my local IP to the router)
s.setsockopt(SOL_IP,IP_ADD_MEMBERSHIP,\
            inet_aton(addr)+inet_aton(host)) #i write 225.0.0.1 as 'addr'

Есть ли другой способ заставить это работать? Я могу запустить простой сервер / чат, используя telnet, но этот графический интерфейс (tkinter) делает его сложным для меня, и я хочу узнать, как это работает.. Спасибо!

1 ответ

Решение

Из определения параметра IP_ADD_MEMBERSHIP первый адрес - это адрес группы многоадресной рассылки, а второй - адрес интерфейса.

Вы используете 127.0.0.1 в качестве первого адреса. Это не адрес многоадресной рассылки.

Адреса многоадресной рассылки находятся в диапазоне 224.0.0.0/4 (то есть от 224.0.0.1 до 239.255.255.254, не включая сетевые и широковещательные адреса).

Например, использование первого (все хосты в одном сегменте сети) многоадресного адреса работает просто отлично:

>>> s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
>>> s.setsockopt(socket.SOL_IP,socket.IP_ADD_MEMBERSHIP,
                 socket.inet_aton('224.0.0.1')+socket.inet_aton('0.0.0.0'))

Проверьте эту ссылку для получения дополнительной информации о многоадресных адресах.

Таким образом, вам нужно выбрать неназначенный адрес многоадресной рассылки в 224/4 для вашего приложения и использовать его (например, все в специальном диапазоне, например 244.0.2.0). Обратите внимание, что адрес многоадресной рассылки не имеет ничего общего с адресом интерфейса (используя "0.0.0.0", вы связываете все локальные интерфейсы с адресом многоадресной рассылки, то есть все интерфейсы могут использоваться для приема / отправки многоадресных пакетов для этой группы).

Другие вопросы по тегам