電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 28|回復(fù): 0
收起左側(cè)

二進(jìn)制通信協(xié)議序列化解析

[復(fù)制鏈接]

502

主題

502

帖子

3383

積分

四級會員

Rank: 4

積分
3383
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 3 天前 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
通信協(xié)議可以理解兩個(gè)節(jié)點(diǎn)之間為了協(xié)同工作實(shí)現(xiàn)信息交換,協(xié)商一定的規(guī)則和約定,例如規(guī)定字節(jié)序,各個(gè)字段類型,使用什么壓縮算法或加密算法等。常見的有tcp,udo,http,sip等常見協(xié)議。協(xié)議有流程規(guī)范和編碼規(guī)范。流程如呼叫流程等信令流程,編碼規(guī)范規(guī)定所有信令和數(shù)據(jù)如何打包/解包。
編碼規(guī)范就是我們通常所說的編解碼,序列化。不光是用在通信工作上,在存儲工作上我們也經(jīng)常用到。如我們經(jīng)常想把內(nèi)存中對象存放到磁盤上,就需要對對象進(jìn)行數(shù)據(jù)序列化工作。
本文采用先循序漸進(jìn),先舉一個(gè)例子,然后不斷提出問題-解決完善,這樣一個(gè)迭代進(jìn)化的方式,介紹一個(gè)協(xié)議逐步進(jìn)化和完善,最后總結(jié)?赐曛,大家以后在工作就很容易制定和選擇自己的編碼協(xié)議。
一、緊湊模式本文例子是A和B通信,獲取或設(shè)置基本資料,一般開發(fā)人員第一步就是定義一個(gè)協(xié)議結(jié)構(gòu):
struct userbase
{
    unsigned short cmd;//1-get, 2-set, 定義一個(gè)short,為了擴(kuò)展更多命令(理想那么豐滿)
    unsigned char gender; //1 – man , 2-woman, 3 - ??
    char name[8]; //當(dāng)然這里可以定義為 string name;或len + value 組合,為了敘述方便,就使用簡單定長數(shù)據(jù)
}
在這種方式下,A基本不用編碼,直接從內(nèi)存copy出來,再把cmd做一下網(wǎng)絡(luò)字節(jié)序變換,發(fā)送給B。B也能解析,一切都很和諧愉快。
這時(shí)候編碼結(jié)果可以用圖表示為(1格一個(gè)字節(jié))

發(fā)表回復(fù)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表