2010-06-08 78 views
2

基本上我试图实现的是一个程序,它允许用户通过网络连接到彼此,基本上是聊天室。我目前正在努力的是编写代码,以便用户可以在不知道其他用户正在使用的计算机的IP地址或知道服务器的IP地址的情况下相互连接。Python中的网络通信程序

有没有人知道一种方式,我可以简单地让所有的用户扫描我的网络的IP范围,以找到任何活动的“房间”,然后给用户一个连接到它的机会?

另外,希望中央服务器不需要运行它,而是每个用户都可以简单地连接到所有其他用户,本质上同时是服务器和客户端。

回答

6

我可以给你两个建议。首先,每个人都会收到到您网络广播地址的UDP数据包。其次,提供某些服务的程序可以在本地网络上找到对方。该协议称为mDNS,ZeroConf或Bonjour。

使用广播UDP很可能是更快的路线。但如果我是你,我会学习如何使用ZeroConf。它在IPv6下得到了很好的支持,并已被几个有趣的程序使用,如SubEthaEditGobby

这是链接到nice tutorial for implementing something that speaks ZeroConf in Python

另一项建议...如果您想要手动播放自己的广播/多播UDP代码,并且您可以确定您所在的所有系统都运行比2003年更新的Linux,并且所有Windows系统是XP或更好的,你可能会逃避使用IPv6。 IPv6链路本地(认为相同的LAN)所有主机组播地址是ff02 :: 1。这非常简单而且容易,并且可以连接到同一LAN上的所有其他系统。这要比找出你的网络的广播地址是用IPv4来得好。

+0

请允许我补充一点,虽然在该教程中链接的sourceforge pyzeroconf存档文件有问题,并且似乎已被废弃,但在此处有一些更新的工作: https://launchpad.net/pyzeroconf此外,协议内置于几乎所有的Mac,Linux机器和主要频段网络打印机中。 – 2010-06-08 02:51:28

+0

感谢您的快速响应,我希望将此应用程序扩展到的一个领域是将文件通过网络传输给其他用户。你知道这是否容易与使用ZeroConf的程序集成? – user360968 2010-06-08 09:20:37

+0

ZeroConf纯粹是一种服务广告和定位机制。除了允许程序实例找到彼此的IP /端口号之外,它将完全独立于您的应用程序。另外,它在Windows上的支持不是很好(不像Mac/Linux那样内置),所以如果你的目标是这个平台,你可能需要考虑直接使用广播UDP(这也是ZeroConf使用的,但它是标准的和更多的用户友好型) – Rakis 2010-06-08 12:39:37