udp聊天?使用udp+python實現多人聊天室

相信來到這個文章裏面的朋友不會對udp陌生,話不多說直接開始。
由於udp沒有建立連接,也沒有實際上的客戶端和服務器端。
但是我們需要讓一個udp來充當服務器!實現消息廣播從而達到聊天室的效果。
以下是充當服務器的udp代碼圖片↓↓↓
sever.png
如果是想在linux上運行的朋友按照管理在第一行加上

#!usr/bin/env python3

實現原理很簡單,當udp服務器收到某個地址給它發過來的消息的時候,將這個地址加入到列表中(方便廣播),以後再收到其它地址發過來的消息的時候爲這個列表中的每個地址發送同樣的消息,並附上發送者的ip地址。
如果列表只增不減,最後效率會變低,會浪費很多時間和資源。
所以我們約定,當某個聊天室成員想退出聊天室的時候,發送一個quit()字符串過去,udp服務器就明白你要退出去了,就把你的ip地址從廣播列表中移出去,這條消息並不會廣播出去。(由於我這裏沒寫界面,所以需要手動發送quit(), 如果寫了界面的話,可以把發送這個消息放到界面的關閉按鈕中,即一點關閉就會發送這條消息,那就很方便啦!)

udp服務器端實現的很簡單。同樣的,客戶端也很簡單
client.png
linux用戶同理在第一行加上文提到的代碼。
udp客戶端基本沒什麼實現的難度,就一個多線程同時實現收和發。
發消息對着服務器的地址發送,然後你的消息就會被所有正在聊天室內的客戶端接收到。同時另外開一個線程保證在發消息的同時也能顯示出其他客戶端發送的消息,這樣我們就實現了聊天室的功能啦!(由於這裏同樣沒有寫界面,所以同時收發消息就會顯得有點格式亂,寫了界面之後可以把收和發放到兩個框框裏面,就會很美觀啦!)

另外這裏標註一下,在我的代碼中,udp客戶端內部固定了某個服務器udp,也就是說,udp客戶端一打開就連上了一個特定的服務器。這裏需要改造一下,不然是用不了的。要麼把服務端內部的特定地址改成你想當作服務器的那個ip的地址,要麼可以使用輸入的方式動態決定服務器地址,都可以~

雖然看着很簡陋,但是要是界面寫得好,代碼再優化一下,完全可以達到qq羣聊天的效果!!

如果想複製代碼或者對代碼有什麼疑問想和我討論的話歡迎關注我的公衆號【程序小員】。
或者來我的個人博客落陽的博客,我會很高興和你交流!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章