怎么用python socket实现聊天室
发表于:2025-02-10 作者:千家信息网编辑
千家信息网最后更新 2025年02月10日,本文小编为大家详细介绍"怎么用python socket实现聊天室",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么用python socket实现聊天室"文章能帮助大家解决疑惑,下面跟着小编的思路
千家信息网最后更新 2025年02月10日怎么用python socket实现聊天室
本文小编为大家详细介绍"怎么用python socket实现聊天室",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么用python socket实现聊天室"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
server端
import socketimport json,structfrom concurrent.futures import ThreadPoolExecutordebug = Trues = socket.socket()s.bind(("127.0.0.1",8848))s.listen()clients = {}pool = ThreadPoolExecutor(100)def send_msg(soc, msg): l = len(msg.encode("utf-8")) soc.send(struct.pack("q",l)) # 发数据 soc.send(msg.encode("utf-8"))"""用于监听已经建立连接的客户端发来的消息"""def task(ip,c): while True: l = c.recv(8) ls = struct.unpack("q",l)[0] data = json.loads(c.recv(ls).decode("utf-8")) #接收到来自客户端的消息。 eg: data = {"to_addr":"msg":""} print("来自%s的消息:%s"%(ip,data["msg"])) # 客户端发过来的数据 # 数据有两种情况 一种是发给所有人的 另一种单独发给某一个人的 if data.get("to_addr"): #传过来一个json格式的字典,如果这个to_addr不是空的话,就私发给目标客户 target_ip = data["to_addr"] #从data字典里中获取目标ip target_conn = clients.get(target_ip) #获取目标客户的conn链接 send_msg(target_conn,data["msg"]) #发送讯息 else: for ip,conn in clients.items(): # if c != target_conn: send_msg(conn,data["msg"])#data["msg"] # # 从所有客户端列表中找到这一个 发给它 # to_addr = data["to_addr"] # # print(data["to_addr"],"_______________") # soc = clients.get(to_addr) # send_msg(soc,data["msg"]) # else: # # 遍历所有客户端 发给每一个人 # for k,soc in clients.items(): # # if soc != c: # send_msg(soc,data["msg"])while True: """以下代码用于检测是否有客户端连接""" c,add = s.accept() print("%s" % add[0],"连接到服务器!") clients[add[0]] = c # 把ip地址作为key,conn作为value存入clients字典中 ,clients = {"192.188.3.4":conn链接} if debug: print("clients=%s"%clients) """以下代码用于监听已经建立连接的客户端发来的消息""" pool.submit(task,add,c)
client端
import socket,json,structfrom threading import Threadc = socket.socket()c.connect(("127.0.0.1",8848))print("连接服务器成功!")def recver(): while True: lens_bytes = c.recv(8) lens = struct.unpack("q", lens_bytes)[0] recv_msg = c.recv(lens).decode("utf-8") print(recv_msg)# 开启线程处理接收数据Thread(target=recver).start()while True: msg = input(">>>>:").strip() # 阻塞 if "@" in msg: info = {"msg":msg.split("@")[0],"to_addr":msg.split("@")[1]} else: info = {"msg": msg} data = json.dumps(info).encode("utf-8") c.send(struct.pack("q",len(data))) c.send(data)
读到这里,这篇"怎么用python socket实现聊天室"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
客户
客户端
utf-8
数据
消息
聊天室
字典
文章
目标
个人
代码
内容
服务器
链接
处理
服务
监听
妥当
成功
地址
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
如何架设服务器直接输ip地址
cs怎么查看正在玩的服务器ip
肇庆知名冷库软件开发
龙拓鑫玺网络技术有限公司
广东企业软件开发公司
戴尔服务器特点
社保卡显示服务器出错
网络安全apt设备
江苏云柜网络技术 新城
简述服务器对权限提升的防护措施
网络安全演讲共
美国爱希格网络安全
长宁区参考数据库服务价钱
深圳crm软件开发机构
服务器什么防火墙好
公安基础数据库后台界面设计
数据库 提交更新
大数据软件开发方法有哪些
领航科技网络技术有限公司
数据库自增字段一定是主键吗
没文凭学软件开发
浙江中联网络技术
象州县五必须网络安全十不准
四级报名服务器繁忙怎么进去
石头科技是不是互联网公司
计算机网络技术爬电线杆触电
2018网络安全宣传周登录
安卓微信数据库修改聊天记录
数据库丢失修改如何解决
我的世界搭服务器