15.3.4 封装好的网络传输单元--类使用(服务方)
服务方用来接收网络客户端连接和数据包,并把该数据包发送给客户端,处理网络消息,代码如下所示。
- #include "TcpServer.h"
- #define MSG_SERVER 1 //客户端传来的消息,由服务端处理
- #define MSG_CLIENT 2 //服务端传来的消息,由客户端处理
- //定义处理MSG_SERVER消息的消息处理函数,此函数用来处理服务方收到的MSG_SERVER网络消息
- 01 void MsgSERVERFunc(CNetPackage *package)
- 02 {
- 03 //下面示例回送客户端一个消息
- 04 CNetPackage *pSendPack = pPackage->m_pHinstance->GetSendIdlePac-
- kage();
- 05 if(NULL != pSendPack)
- 06 {
- 07 pSendPack->WriteProc(MSG_CLIENT); //写消息
- 08 pSendPack-> WriteString ("hello client"); //写消息内容
- 09 pSendPack->SendMSG_Server(); //服务方调用此发送
- 10 }
- 11 }
【代码解析】
第4行根据与发送数据来的网络连接实例取得一个未用的网络发送包,准备用于向外发送数据。第5~9行发送一个数据包,记住数据包格式定义为:包头(4字节)+消息+消息内容+包尾,其中包头和包尾由打包器自动记录,这里消息内容为字符串hello client。
main()函数是程序的入口函数,当程序运行时,首先执行该函数,代码如下所示。
- 01 void main(int argc, char* argv[])
- 02 {
- 03 CTcpServer g_ pServer (4); //最多支持4个连接的服务方
- 04 //注册MSG_SERVER消息的消息处理函数
- 05 g_ pServer.RegsiterMsgToServer(MSG_SERVER, MsgSERVERFunc);
- 06 char ip[16] = “127.0.0.1”; //服务器IP
- 07 __int16 port = 8000; //服务器端口
- 08 if(g_pServer.CreateServer(ip, port)) //创建服务器
- 09 {
- 10 g_pServer.RunServer(); //创建成功后运行服务器
- 11 }
- 12 Getchar();
- 13 g_pServer.StopServer(); //结束调用
- 14 }
【代码解析】
由以上代码来分析服务方的工作流程,如下所示。
第3行创建服务器实例。
第5行注册服务器上处理的网络消息以及处理此网络消息的消息处理函数。
第8行根据服务器IP和端口创建服务器。
第10行创建服务器成功后运行服务器。
第13行退出程序时停止服务器。