电子产业一站式赋能平台

PCB联盟网

搜索
查看: 22|回复: 0
收起左侧

二进制通信协议序列化解析

[复制链接]

502

主题

502

帖子

3383

积分

四级会员

Rank: 4

积分
3383
发表于 前天 11:38 | 显示全部楼层 |阅读模式
通信协议可以理解两个节点之间为了协同工作实现信息交换,协商一定的规则和约定,例如规定字节序,各个字段类型,使用什么压缩算法或加密算法等。常见的有tcp,udo,http,sip等常见协议。协议有流程规范和编码规范。流程如呼叫流程等信令流程,编码规范规定所有信令和数据如何打包/解包。
编码规范就是我们通常所说的编解码,序列化。不光是用在通信工作上,在存储工作上我们也经常用到。如我们经常想把内存中对象存放到磁盘上,就需要对对象进行数据序列化工作。
本文采用先循序渐进,先举一个例子,然后不断提出问题-解决完善,这样一个迭代进化的方式,介绍一个协议逐步进化和完善,最后总结。看完之后,大家以后在工作就很容易制定和选择自己的编码协议。
一、紧凑模式本文例子是A和B通信,获取或设置基本资料,一般开发人员第一步就是定义一个协议结构:
struct userbase
{
    unsigned short cmd;//1-get, 2-set, 定义一个short,为了扩展更多命令(理想那么丰满)
    unsigned char gender; //1 – man , 2-woman, 3 - ??
    char name[8]; //当然这里可以定义为 string name;或len + value 组合,为了叙述方便,就使用简单定长数据
}
在这种方式下,A基本不用编码,直接从内存copy出来,再把cmd做一下网络字节序变换,发送给B。B也能解析,一切都很和谐愉快。
这时候编码结果可以用图表示为(1格一个字节)
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表