您的位置:首页技术文章
文章详情页

python socket实现聊天室

【字号: 日期:2022-06-15 10:41:26浏览:6作者:猪猪

本文实例为大家分享了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 编程
相关文章: