长度不一的UDP包的数据内容怎么处理才不会遗漏


服务器端通过udp广播的方式向客户端发送报文,报文的格式如下:


 ****cccgc@num=01@time=20081122100100@cccfxx=110@cccfss=0.2@cccttt=14.7@cccfxx02=120@cccfss02=0.2@cccfxx10=150@cccfss10=0.5@cccfxx2bh=110-150@cccprr=0.0@ccctdd=10.1@cccuuu=74@cccmaxt=14.7@cccmint=8.0@cccfss10max=1.7@cccfss10mnm=0.2@cccfss02max=0.6@cccfss02mnm=0.1@cccfxx10bh=150-230@cccppp=816.2@cccqfe=816.35@cccqnh=1025.60@cccvvv=19404@cccygjs=3150@####

每一对“key=value”都是用@符号分隔。每条报文里的“key=value”个数不一样,所以长度也不一样,但是我python读取udp包里的数据的时候,如果用recv(1024)这样固定的缓冲区长度去读取,有时候会不能把一条完整的数据报文读取到,想请问下大伙,平时是如何处理这样的报文的?能提供个思路不?

python

ares38 9 years, 8 months ago

所有的基于TCP/IP协议的通讯应用都应该在开发之前制订应用层的通讯协议,比如在包头里明确数据包类型和长度,在包尾做异或校验或和校验。针对你目前的情况,只能考虑申请一段比较大的缓冲区,在没找到####之前就一直往这个缓冲区中memcpy,直至找到后,将缓冲区里的内容拿出来解析。

灬NIE丶 answered 9 years, 8 months ago

Your Answer