Python中的网络通信程序
我想做的基本上是一个程序,让用户可以在网络上互相连接,像是在一个聊天室里。现在我遇到的问题是,怎么写代码让用户可以互相连接,而不需要知道对方电脑的IP地址,也不需要知道服务器的IP地址。
有没有人知道一种方法,可以让所有用户扫描我网络的IP范围,找到任何活跃的“房间”,然后给用户一个连接的机会呢?
另外,我希望这个程序不需要一个中央服务器来运行,而是每个用户都能直接连接到其他用户,实际上每个人同时充当服务器和客户端。
1 个回答
6
我可以给你两个建议。首先,发送UDP数据包到你网络的广播地址,所有设备都会收到这个数据包。其次,有一种协议可以帮助程序在本地网络上找到彼此,这个协议叫做mDNS,或者说是ZeroConf,还有一个名字叫Bonjour。
使用广播UDP可能会更快一些。但如果我是你,我会选择学习如何使用ZeroConf。这个协议在IPv6下支持得很好,已经被一些有趣的程序使用,比如SubEthaEdit和Gobby。
这里有一个链接,提供了一个关于如何在Python中实现ZeroConf的不错教程。
还有一个建议……如果你想自己编写广播/多播的UDP代码,并且可以确保你使用的所有系统都是2003年之后的Linux版本,或者Windows系统是XP及以上版本,那么你可以考虑使用IPv6。IPv6的链路本地地址(也就是同一个局域网内)所有主机的多播地址是ff02::1。这非常简单易用,可以覆盖同一局域网内的所有其他系统。比起用IPv4去搞清楚你的网络广播地址,这要好得多。