char m_nUserName [20]; //用户名(20bytes) char m_nPassword[32]; //密码md5值(32bytes)
} DATA_LOGIN; (2)应答包定义
应答包的包头中,除了PacketLength包体长度和ReturnCode返回码以外,其他的都与请求包相同。在应答包中,m_nPacketLength = 4,ReturnCode则用来标识认证是否通过,具体返回码可以参见2.1中的内容。
包体中则是认证后返回给客户端的对应用户的ID码,如果认证失败,返回的ID码为0,程序将关闭其SOCKET其结构定义如下:
m_nPacketLength = 4; typedef struct data_back_login {
uint32 m_nStaffID; } DATA_BACK_LOGIN; 2)获取用户详细信息
客户端通过发送请求包,告知服务器要进行获取信息的操作以及需要获取何用户的信息,以ID号标识用户。此操作的MajorType为0x01,ServiceCode为0x02,OperationCode为0x28,包体长度为4,仅包含要请求的用户信息对应的ID。以下为该协议请求包和应答包结构定义的关键实现代码:
(1)请求包定义
其中,包头中关键属性设置为: m_nMajorType = 0x01; m_nServiceCode = 0x02; m_nOperation = 0x28; m_nPacketLength = 4; 包体的结构定义如下: typedef struct data_getInfo {
int32 m_nStaffID; } DATA_GETINFO; (2)应答包的定义
同其他应答请求包一样,包头中的m_nMajorType,m_nServiceCode,m_nOperation这三个标识操作类型的属性在请求包和应答包中是对应相等的。而
作为应答包,另一个重要的关键属性就是ReturnCode的值,以此来告知请求方服务端对其请求的响应结果。
此应答包包体包含内容为对应请求包包体中ID号的对应用户的全部详细信息。结构定义代码如下: Typedef struct staff_info {
Int32 m_nStaffID; Int8 m_nStaffNameLen;
Char m_nStaffName[MAX]; //员工姓名 Int8 m_nEmailLen;
Char m_nEmail[MAX]; //联系邮箱 Int8 m_nPhoneLen;
Char m_nPhone[MAX]; //手机号 Int8 m_nAddressLen;
Char m_nAddress[MAX]; //联系地址 Byte m_nSex; //性别(0男 1女) Byte m_nDateTime[8]; //加入时间(YYYYMMDD) Byte m_nBirthday[8]; //出生年月(YYYYMMDD)
Byte m_nUserState; //用户在线状态,0表示在线 1表示不在线 } STAFF_INFO
//员工ID
3.3 本章小结
本章主要介绍了本系统在TCP模式下具体的数据传输办法,详细设计出了系统C/S结构下Client端与Server端之间进行网络传输的通信协议。并在通信协议数据包中,以三个常见的典型功能作为示例论述了协议包的设计和实现方案。
4 网络数据传输控制模块