• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

python socket实现聊天室

python 搞代码 4年前 (2022-01-08) 21次浏览 已收录 0个评论

这篇文章主要为大家详细介绍了python socket实现聊天室,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了python socket实现聊天室的具体代码,供大家参考,具体内容如下

server端

 import socket import json,struct from concurrent.futures import ThreadPoolExecutor debug = T<a style="color:transparent">来源gao($daima.com搞@代@#码(网</a>rue s = 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,struct from threading import Thread c = 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实现聊天室的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python socket实现聊天室
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址