一、楔子
最近做了一个需求遇到一个坑,归结成一个小问题,其实就是在socket的server端处理client端发来的数据的问题,现将这个问题总结一下,本文将数据在server端以字典的形式存储。
另外,由于我想做一个动图的演示,所以本文没有用MarkDown写,希望本文的干货能弥补格式带来的不适ε=(´ο`*)))
二、基于原生UDP的实现
我们这里用“默认字典”去实现数据的构建,基于原生UDP的代码如下:
# -*- coding:utf-8 -*- import socket from collections import defaultdict server = socket.socket(type=socket.SOCK_DGRAM) server.bind(('127.0.0.1',9002)) print('Listening......') client_msg = { '123':'Naruto', '456':'Sasuke', } dic_msg = defaultdict(list) while 1: try: # 接收 recv_msg,addr = server.recvfrom(1024) recv_msg = recv_msg.decode('utf-8') # 这里只切割一次,避免后面的数据还有|符号 cid = recv_msg.strip().split('|',1)[0] msg = recv_msg.strip().split('|',1)[1] # 默认字典 dic_msg[client_msg[cid]] dic_msg[client_msg[cid]].append(msg) # 回复 server.sendto('收到了'.encode('utf-8'),addr) print('消息字典:%s'%(dict(dic_msg))) except Exception as e: print(e)