typedef struct tagRawMessagePacketHeader{ // 报文头部
DWORD dwHeader; // 报文引导符(0x12345678)
//DWORD dwSenderId; // 发送者编号
WORD wSenderType; // 发送者类型
WORD wServerAId; // 服务器ID(S-C)
WORD wReceiverType; // 接收者编号
WORD wServerBId; // 接受者所在的服务器ID(C-S)
WORD wNumOfMsg; // 报文中消息数
WORD wPacketLen; // 报文内容长度
short sCheckSum; // 报文头校验码
}RAWMESSAGEPACKETHEADER, *PRAWMESSAGEPACKETHEADER;
typedef struct tagSingleMessage{ // 报文内消息体
BYTE bVersion; // 消息版本
WORD wType; // 消息类型
DWORD dwId; // 消息编号
DWORD dwSenderId; // 发送者编号
DWORD dwReceiverId; // 接收者编号
time_t tSendTime; // 发送时间
time_t tDropTime; // 留存时间
char cSendType; // 发送类型:0-一对一;1-一对多;2-其它
char cStatus; // 消息转发状态:
// 0-直接发送;
// 1-通过服务器转发;
// 2-离线消息转发;
// 3-其它。
WORD wMessageLen; // 消息内容长度
char acMessageText[1]; // 消息内容:原消息报文内容(最长1400字节)
}SINGLEMESSAGE, *PSINGLEMESSAGE;
用上面的定义我们可以在一个消息包中发送多个消息,每个消息包都是连在一块的,总长度在wPacketLen中可以定义,每个消息包自己长度在wMessageLen中定义。