Проблемы с чатом в 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", вы связываете все локальные интерфейсы с адресом многоадресной рассылки, то есть все интерфейсы могут использоваться для приема / отправки многоадресных пакетов для этой группы).