import socket
import struct
# 创建UDP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定到特定的IP和端口
sock.bind(("192.168.100.1", 60000))
# 定义包头和包尾
HEADER = 0x55aa55aa
TAIL = 0xff00ff00
# 定义一个字典来存储分片的数据
data_dict = {}
while True:
# 接收数据
data, addr = sock.recvfrom(2048)#or repair to 1200
# 解析包头,帧序号和包尾
header, frame_number, *real_data, tail = struct.unpack('!I I {}s I'.format(len(data)-12), data)
# 检查包头和包尾是否正确
if header == HEADER and tail == TAIL:
# 如果帧序号已经在字典中,那么就把数据添加到对应的帧序号中
if frame_number in data_dict:
data_dict[frame_number] += real_data
else:
# 否则,创建一个新的帧序号,并把数据添加进去
data_dict[frame_number] = real_data
# 当收到所有的分片后,打印出真实的数据
if len(data_dict[frame_number]) == 8*2*1024:
print(data_dict[frame_number])
del data_dict[frame_number]
python的socket接收数据
最新推荐文章于 2024-02-14 09:56:34 发布