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

作者:wangziwenhk 时间:2021-05-21 01:10:46 

python聊天室

很多人都觉得微信,QQ,ICQ(我不知道现在还能不能用了)都过于垃圾,想要自己做一个聊天室(或是聊天软件),所以我们可以自己做一个。

想要做出聊天室(或是聊天软件),我们就需要搞清楚它们的原理,这里我们用一个图片

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

来给你们看

我们可以看到,服务端其实就只是起到了一个转发消息的原理,搞清楚原理,就开始做

服务端


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

来源:https://blog.csdn.net/wangziwenhk/article/details/119810028

标签:python,聊天室
0
投稿

猜你喜欢

  • win2000server IIS和tomcat5多站点配置

    2023-06-26 04:45:33
  • Python深度学习之使用Albumentations对图像做增强

    2023-11-24 06:18:23
  • python 文件常用操作demo(读写 打开方式)

    2023-12-22 05:25:07
  • python奇偶行分开存储实现代码

    2022-01-30 09:30:24
  • 基于Python绘制世界疫情地图详解

    2021-11-23 09:10:36
  • MSSQL 生成日期列表代码

    2024-01-26 23:58:01
  • Go实现简易RPC框架的方法步骤

    2024-04-26 17:16:33
  • Python format字符串格式化函数的使用

    2023-12-20 12:45:59
  • Python画图时如何调用本地字体

    2023-08-02 08:51:31
  • Vue.extend实现组件库message组件示例详解

    2024-05-09 15:09:26
  • Python类中的魔法方法之 __slots__原理解析

    2023-10-01 18:49:51
  • python requests库爬取豆瓣电视剧数据并保存到本地详解

    2022-05-29 08:35:05
  • JavaScript中匿名函数用法实例

    2024-04-19 09:51:19
  • Pycharm激活码激活两种快速方式(附最新激活码和插件)

    2023-05-17 12:07:07
  • 如何设置PyCharm中的Python代码模版(推荐)

    2022-12-14 03:56:29
  • MySQL 5.7.14 net start mysql 服务无法启动-“NET HELPMSG 3534” 的奇怪问题

    2024-01-12 17:19:38
  • 闲聊html和body标签

    2009-02-21 10:50:00
  • 在Python中执行系统命令的方法示例详解

    2022-10-24 05:32:27
  • 解决MySQL5.1安装时出现Cannot create windows service for mysql.error:0

    2024-01-28 09:56:13
  • JavaScript实现相册弹窗功能(zepto.js)

    2024-04-19 10:42:49
  • asp之家 网络编程 m.aspxhome.com