2010-06-08 68 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