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(\'\\n公告:一个未知的人离开了聊天室......\'.encode(\'utf-8\'))#广播 return None for i in socket_list: i.send(f\'\\n公告:欢迎{nikename}进入了聊天室........\\n\'.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
总结
本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注自学编程网的更多内容!