❶ socket数据包解析问题

//协议头
structheader
{
charflag=0x7e;
charcFlag;
unsignedshortlen;
};
//消息
structmsg
{
structheadermsg_header;
chardata[2048];
charcs_code;
charbottom=0x7e;
}

❷ 串口通信中的数据包是什么意思,怎么解析(最好来点c代码举例下)

通俗的说就是符合某通讯协议的一组二进制串或字符串。
有些有包头及包尾,如modbus ascii,冒号表示包头,回车(0xd)表示包尾,
某些没有包头及包尾,如modbus rtu,如果时间超过3.5个字符,表示新的一桢数据包。
数据包还真不好用c语言举例。
这样说吧,比如一桢数据包可以这样定义:
第一字节:从站地址+第二字节:指令类型(读还是写,bool,short还是float)+第三第四字节:地址+第五第六字节:crc校验。
可以有一个结构体与之对应:
typedef struct _protocol
{
char cStationAddr;
char cInst;
short sAddr;
short sCRC;
}PRO;
发送协议需要将结构体打包成串,接受到串后需要解包。
就这个例子而言,解包就比较容易了,如接收缓冲区为
char cBuff[MAX_BUF_LEN];
PRO thePro;
那么,thePro.cStationAddr=cBuff[0];
同理,thePro.sAddr=(cBuff[2]<<8)|cBuff[3];//这句就不解释了哈,相信你能看懂。
当然,通讯协议可以自己定义,符合某通讯协议(如tcp/ip)可以直接跟其他机器通讯。
打个比方,通讯协议就是中文,英文,德文。。。,数据包就是某种语言的一句话,语种相同的人,互相说话,就是在传递数据包,你可以传“你好”或“hello”数据包。
所以建议楼主学习一下通讯协议,如modbus,你就明白了,但你要做好克服困难的心理准备先。
全手工录入,满意请点赞。谢谢。