0

我在 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 运行一个简单的服务器/聊天,但是这个 GUI(tkinter)认为这对我来说很复杂,我想了解它是如何工作的。谢谢!

4

1 回答 1

0

从 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 中为您的应用程序选择一个未分配的多播地址并使用它(例如,ad-hoc 范围内的任何内容,如 244.0.2.0)。请注意,多播地址与接口地址无关(使用“0.0.0.0”,将所有本地接口与多播地址相关联,这意味着所有接口都可用于接收/发送该组的多播数据包)。

于 2013-02-22T23:19:24.547 回答