python聊天室
很多人都覺得微信,QQ,ICQ(我不知道現在還能不能用了)都過于垃圾,想要自己做一個聊天室(或是聊天軟件),所以我們可以自己做一個。
想要做出聊天室(或是聊天軟件),我們就需要搞清楚它們的原理,這里我們用一個圖片
來給你們看
我們可以看到,服務端其實就只是起到了一個轉發消息的原理,搞清楚原理,就開始做
服務端
import socket,threading #導入文件 def shou(new_s,socket_list):#創建一個收的函數 try: nikename = new_s.recv(1024).decode("utf-8").strip()#為當前客戶端執行一次‘收"來獲取 except: new_s.close()#關閉當前客戶端的套接字 socket_list.remove(new_s)#去除套接字列表里的nes_s for i in socket_list: i.send(" 公告:一個未知的人離開了聊天室......".encode("utf-8"))#廣播 return None for i in socket_list: i.send(f" 公告:歡迎{nikename}進入了聊天室........ ".encode("utf-8"))#廣播 while 1: try: recv_data = new_s.recv(1024).decode("utf-8")#如果接受到了客戶端發來的信息 print(recv_data)#僅作提醒用 for i in socket_list: i.send(f"{nikename}:{recv_data}".encode("utf-8"))#廣播 except: new_s.close()#關閉當前客戶端的套接字 socket_list.remove(new_s)#去除套接字列表里的nes_s for i in socket_list: i.send(f"公告:{nikename}離開了聊天室......".encode("utf-8"))#廣播 break#跳出循環 def fa(new_s): while 1: msg = input("")#發出 new_s.send(msg.encode("utf-8")) #創建套接字 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #綁定 s.bind(("",5678))#端口 #監聽 s.listen(5) print("服務端處于監聽狀態,等待客戶端接入..........") socket_list = [] while 1: #接入 new_s,addr = s.accept() print("客戶端已接入") socket_list.append(new_s) new_s.send("請輸入昵稱:".encode("utf-8")) t1 = threading.Thread(target=shou,args=(new_s,socket_list)) t2 = threading.Thread(target=fa,args=(new_s,)) t1.start() t2.start() # new_s.close() # s.close()
客戶端
怎么樣,服務端是不是很簡單?接下來我們做客戶端
import socket,threading import tkinter as tk #創建套接字 a = 1 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(("127.0.0.1",5678))#此處端口看服務端的端口,127.0.0.1要改成服務端主機的ipv4地址 print("已鏈接服務端,通訊加密中") def shou(s,msg_texe): recv_data = s.recv(1024).decode("utf-8") msg_text.insert(tk.END, recv_data) while 1: recv_data = s.recv(1024).decode("utf-8") msg_text.insert(tk.END,recv_data) def fa(): global a if a == 0: msg = input_text.get("0.0",tk.END) s.send(msg.encode("utf-8")) input_text.delete("0.0",tk.END) else: msg = input_text.get("0.0", tk.END) s.send(msg.encode("utf-8")) input_text.delete("0.0", tk.END) msg_text.delete("0.0", tk.END) a = 0 app = tk.Tk() app.title("聊天室") #顯示消息框 msg_frame = tk.Frame(app,width=480,height=300) msg_frame.grid(row=0,column=0,padx=6,pady=6) msg_frame.grid_propagate(0)#固定Frame的大小 msg_text = tk.Text(msg_frame,bg="white") msg_text.grid() # msg_text.insert("0.0","hhh") #輸入 input_frame = tk.Frame(app,width=480,height=100) input_frame.grid(row=1,column=0) input_frame.grid_propagate(0) input_text = tk.Text(input_frame,bg="white") input_text.grid() #發送按鈕 btn_frame = tk.Frame(app,width=480,height=20) btn_frame.grid(row=2,column=0,sticky="E") button = tk.Button(btn_frame,text="發送",command=fa) button.grid() #線程 t1 = threading.Thread(target=shou,args=(s,msg_text)) t1.daemon = True t1.start() app.mainloop() #s.close()
伸手黨下載鏈接:https://pan.baidu.com/s/1KD6p_a2KgFxbOVN5yftQRw
提取碼:2iwk
總結
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!
原文鏈接:https://blog.csdn.net/wangziwenhk/article/details/119810028