11.2 通信数据
在本节中,将向用户讲解关于服务器与客户端之间传输的通信数据格式和主要功能的实现方法。最后,将这些功能以及数据封装在CData类中供用户使用。
11.2.1 定义通信数据结构
一般情况下,在服务器与客户端之间的通信数据必须具有相同的数据结构。这样,既能保证数据的完整性,又能使这些数据具有良好的可读性。
首先,用户需要分析该实例中,对于通信数据而言,哪些是比较重要的。在本章中向用户列举了一些数据,例如,客户端IP地址、客户昵称等。
然后,用户需要将这些数据组合到一个结构体中。代码如下:
- typedef struct qq_str{ //自定义QQ数据结构体
- char m_name[50]; //发送信息客户昵称
- char m_name1[50]; //接收信息客户昵称
- int m_addr; //客户端IP地址
- char msg[1024]; //客户端与服务器的通信内容
- } qqstruct;
上面的结构体qqstruct已经基本包含了本实例中客户端的主要数据。当然,用户在实际使用该结构时,在服务器端同样需要该结构体。所以,用户在构造服务器端数据结构时,需要首先定义一个该结构变量。
另外,服务器端为了将接收到的消息转发到该信息真正的接收方,必须定义第二个结构体。在该结构体中包含有结构体qqstruct变量和服务器端调用函数accept()时所返回的通信套接字。结构如下:
- typedef struct q_str{ //服务器转发消息数据结构
- qqstruct qq; //客户端数据结构变量
- SOCKET s; //消息接收方套接字句柄
- }qqmsg;
注意:在服务器端转发消息时,是利用接收信息方客户的昵称查找相应的通信套接字的。