新闻动态

python聊天室(虽然很简洁,但是可以用)

发布日期:2022-02-08 08:02 | 文章来源:源码之家

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

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注本站的更多内容!

香港服务器租用

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

相关文章

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部