李国帅
为了将xml字符串打包进消息体,采用tcp方式进行传输,特意设计了一个自定义的传输格式。
思路
从本地结构体数据到要发送的数据分为两步走
1、把本地数据变为st_NetMsg结构体数据, xml消息字符串指针作为结构体的一个成员。
每次的组装有nMsgLength,cCheck nXmlLength,sXml 4个字段不一样
2、把st_NetMsg编程要发送的数据包,重新组装数据。
结构体
#pragma pack(1)//pack(push, 1)
struct st_NetHeader// 消息头8 Bytes
{
unsigned short usHMask;// 起始码,固定为0xFFFC
unsigned char DoCheck : 1;//标识符 0位:消息是否做和校验:1-消息有和校验,0-消息未做和校验
unsigned char DoZip : 1;//标识符 1位:是否压缩:1-消息压缩,0-消息未压缩
unsigned char DoEncrypt : 1;//标识符 2位:是否加密:1-消息加密,0-消息未加密
unsigned char DoPreserve : 5;//标识符 保留
unsigned char cFormat;// 内容格式 0 xml字符串;1二进制结构体
unsigned int nMsgLength;// 消息长度 整个发送消息体的长度,包括消息头、消息尾等
};
struct st_NetTail //消息尾4 Bytes
{
unsigned char cCheck;// 校验和 当标识符Bit 0为0时,该字节为0,否则为消息头至该校验和(不含)字节的字节循环异或(XOR)校验和
unsigned char cPreserve;// 预留 可放置消息版本等
unsigned short usTMask;//结束码 固定为0xFFFD
};
struct st_NetBody //消息体
{
int nXmlSize;
char* sXml;//消息体 经过相应编码(UTF-8)后的XML消息文本
};
struct st_NetMsg
{
st_NetHeader oHeader;
st_NetBody oBody;
st_NetTail oTail;
};
#pragma pack()//pack(pop)