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,也可以单步调试。