Python的插座聊天问题

Python的插座聊天问题

问题描述:

我已经找到了在Python聊天应用程序代码,但我无法找到作者或任何网站,以帮助我与它的任何东西..Python的插座聊天问题

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

我得到一种感觉缺了点什么..我需要这个,我想修改它,并尝试学习更多的东西

我做了一些读书,这是我的第三次编辑这篇文章.. 现在,我能够保持连接而没有得到任何错误,但是当我尝试发送(键入我n)不发送也不接收的东西。但是,每当我尝试运行第二个应用程序作为另一个“人”时,我都会在第一个运行的应用程序中收到“人员”已连接的消息,并且第一个应用程序因此错误崩溃:

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)认为它使我感到很复杂,我想了解它是如何工作的。 谢谢!

+0

看看http://msdn.microsoft.com/en-gb/library/windows/desktop/ms740668%28v=vs.85%29.aspx并向下滚动到错误10049.这应该解释错误 – chrisw 2013-02-22 22:45:01

+0

我明白了..但是如果我试图绑定到0.0.0.0,是不是应该像这样工作?这就像我说的那样,它可以绑定到任何地方? – 2013-02-22 22:55:16

+0

如果包含更多代码,那么人们可以回答更有帮助。我看不到你的代码片段有什么问题。 – chrisw 2013-02-22 23:09:32

根据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')) 

检查这个reference有关组播地址的详细信息。

因此,您需要为您的应用程序选择一个未分配的224/4多播地址并使用它(例如,在ad-hoc范围内的任何内容,例如244.0.2.0)。请注意,多播地址与接口地址无关(使用'0.0.0.0',您将所有本地接口与多播地址关联,这意味着可以使用所有接口接收/发送该组的多播包)。

+0

说明了很多!谢谢..但是,我仍然有问题(我开始认为别的东西在代码中是错误的,或者我无法得到它的工作方式)*原始帖子中增加了更多代码* – 2013-02-23 00:30:11

+0

其中原件张贴? – isedev 2013-02-23 00:32:55

+0

我编辑只知道..是的,谢谢你指出这一点。你的答案也被接受! – 2013-02-23 00:47:04