Python套接字聊天问题



我在Python中找到了一个聊天应用程序的代码,但我找不到任何关于作者或网站上任何人的信息来帮助我。

这是整个代码的链接:http://files.myopera.com/manojsheokand666/blog/chat.py

我感觉少了点什么。。我需要这个,我想修改它,并尝试学习更多的

我读了一些书,这是我第三次编辑这篇文章。。现在,我可以保持连接而不会出现任何错误,但当我尝试发送(键入)某些内容时,它既不发送也不接收。但是,每当我试图以另一个"人"的身份运行第二个应用程序时,我都会在第一个运行的应用程序上收到一条"人"已连接的消息,而第一个应用程序会因以下错误而崩溃:

KeyError:(1270.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运行一个简单的服务器/聊天,但这个GUI(tkinter)的想法让我觉得很复杂,我想了解它是如何工作的。。谢谢

根据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",您将所有本地接口与多播地址相关联,这意味着所有接口都可以用于接收/发送该组的多播数据包)。

最新更新