文章预览
最近在搞个网络通信协议, 采用socket udp传输, 运行时居然报段错误了。 经过debug,发现居然是因为字节对齐问题导致的。 这个问题在实现通信协议,是经常会遇到的问题。 为了方便读者理解, 我把内容做了简化,分享给大家。 1、协议说明 通信协议信令格式如下: typedef struct protocol_msg_s { UINT8 msgType; UINT8 data1; UINT8 data2; UINT16 len; char data[ 100 ]; }PRO_MSG; 根据协议格式,我造了一个数据frm,代表我收到的某个信令, UCHAR frm[]={ 0x12 , 0x34 , 0x56 , 0x00 , 0x07 , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 }; 根据协议, 信令的字段与原始帧对应关系如下: 于是,我实现了一个简单的解析代码【该代码有问题】。 int main ( int argc, char **argv) { int ret; int frm_len = 0 ; UINT8 frm[]={ 0x12 , 0x34 , 0x56 , 0x00 , 0x07 , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x0
………………………………