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

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

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

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

[復(fù)制鏈接]

502

主題

502

帖子

3383

積分

四級會員

Rank: 4

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

使用道具 舉報

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

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

本版積分規(guī)則


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