re: 【原創】技術系列綜述(一) powervv 2008-10-23 14:38
期待下文。
關于“二進制包使用結構直接解包”這部分有些疑義,
首先這里代碼沒有考慮字節序問題,對于little endian的x86機器,定義位段應當反過來,另外seq還需要ntohs轉字節序。
其次結構體默認并非緊湊對齊的,若需正常還要設定對齊方式為1字節,避免縫隙,而這樣會影響性能。
#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)
我也是做流媒體和多媒體相關工作的,工作中也會遇到很多協議打包,解包工作,其實大部分協議都類似,不過分文本協議和二進制協議兩大類,手工寫這些代碼很煩,經常想是不是能搞一個自動編譯的工具生成解析和打包代碼,性能上作為流服務器可能要關注,對于終端來講,解碼才是大頭,協議這一塊倒不用太考慮。希望能有機會多交流。
slickedit不錯,簡單試用了下,可以自動生成makefile,也可以單步調試。