期待下文。
關(guān)于“二進制包使用結(jié)構(gòu)直接解包”這部分有些疑義,
首先這里代碼沒有考慮字節(jié)序問題,對于little endian的x86機器,定義位段應(yīng)當反過來,另外seq還需要ntohs轉(zhuǎn)字節(jié)序。
其次結(jié)構(gòu)體默認并非緊湊對齊的,若需正常還要設(shè)定對齊方式為1字節(jié),避免縫隙,而這樣會影響性能。
#pragma pack(push, 1)
struct Packet{
#if BIGENDIAN
unsigned char v:2;
unsigned char p:1;
unsigned char x:1;
unsigned char cc:4;
#else
unsigned char cc:4;
unsigned char x:1;
unsigned char p:1;
unsigned char v:2;
#endif
unsigned short seq;
};
#pragma pack(pop)
我也是做流媒體和多媒體相關(guān)工作的,工作中也會遇到很多協(xié)議打包,解包工作,其實大部分協(xié)議都類似,不過分文本協(xié)議和二進制協(xié)議兩大類,手工寫這些代碼很煩,經(jīng)常想是不是能搞一個自動編譯的工具生成解析和打包代碼,性能上作為流服務(wù)器可能要關(guān)注,對于終端來講,解碼才是大頭,協(xié)議這一塊倒不用太考慮。希望能有機會多交流。
slickedit不錯,簡單試用了下,可以自動生成makefile,也可以單步調(diào)試。