python - 长度不一的UDP包的数据内容怎么处理才不会遗漏
黄舟
黄舟 2017-04-17 14:25:51
[Python讨论组]

服务器端通过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)这样固定的缓冲区长度去读取,有时候会不能把一条完整的数据报文读取到,想请问下大伙,平时是如何处理这样的报文的?能提供个思路不?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(1)
伊谢尔伦

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号