设为首页 加入收藏

TOP

15.3.3 封装好的网络传输单元--类介绍
2013-10-07 14:38:15 来源: 作者: 【 】 浏览:49
Tags:15.3.3 封装 网络传输 单元 介绍

15.3.3  封装好的网络传输单元--类介绍

关于Winsock编程(www.cppentry.com)的详细介绍请参看其他资料,这里介绍由笔者已封装的IOCP,以及它所实现的网络通信模块的使用和实现方式,读者也可参考本例来实现自己的方式。其中主要类的介绍如下所示。

CDgj_InitSocket类实现Winsock库初始化:Dgj_InitSocket.h、Dgj_InitSocket.cpp文件。

CDgj_Lock类实现多线程安全锁:Dgj_Lock.h Dgj_Lock.cpp文件。

CDgj_Log类实现调试日志:Dgj_Log.h Dgj_Log.cpp文件。

CDgj_Mvar类实现多线程安全模板变量:Dgj_Thread.h文件,其定义的数据类型如表15.1所示。

CNetPackage类代表一个网络传送的数据包:NetPackage.h NetPackage.cpp文件。

CTcpClient类表示一个网络传输的客户端:TcpClient.h TcpClient.cpp文件。

CTcpConnectHinstance类表示具体的网络连接实例:TcpConnectInstance.h TcpConnectInstance.cpp文件。

CTcpServer类表示一个网络传输的服务端:TcpServe.h TcpServe.cpp文件。

表15.1  Dgj_Thread.h文件定义数据类型

DGJ_CHAR< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

DGJ_UCHAR

DGJ_SHORT

DGJ_USHORT

DGJ_INT

DGJ_UINT

DGJ_LONG

DGJ_ULONG

DGJ_FLOAT

DGJ_DOUBLE

DGJ_BOOL

DGJ_LPVOID

DGJ_BYTE

 

 

 

CNetPackage类定义网络包的格式为:包头4字节+协议2字节+消息内容+包尾4字节。包头4字节和包尾4字节就是此包总长度,正确的包:包长大于10字节小于MAX_NETPACK_SIZE,包头=包尾。包缓冲大小在文件中定义为#define MAX_NETPACK_SIZE 256×1024,可以根据实际情况修改。该类的主要方法如下所示。

  1. //打包函数组  
  2. void WriteProc(unsigned __int16 proc);          //写消息  
  3. void WriteInt8(unsigned __int8 int8Param);      //写1字节  
  4. void WriteInt16(unsigned __int16 int16Param);   //写2字节  
  5. void WriteInt24(unsigned __int32 int24Param);   //写3字节  
  6. void WriteInt32(unsigned __int32 int32Param);   //写4字节  
  7. void WriteInt64(unsigned __int64 int64Param);   //写8字节  
  8. void WriteString(char *str);                    //写字符串  
  9. void WriteStruct(void *pStruct, unsigned __int32 structSize);   //写结构  
  10. //解包函数组  
  11. __int8 ReadInt8(void);                          //读1字节  
  12. __int16 ReadInt16(void);                        //读2字节  
  13. __int32 ReadInt24(void);                        //读3字节  
  14. __int32 ReadInt32(void);                        //读4字节  
  15. __int64 ReadInt64(void);                        //读8字节  
  16. void ReadString(char *strBuf, int strBufSize);  //读字符串  
  17. void ReadStruct(void *pStructBuf, unsigned __int32 structSize); //读结构  
  18. //发送数据包  
  19. int SendMSG_Server(void);//如果是服务器方,则调用此函数发送数据  
  20. int SendMSG_Client(void);//如果是客户方,则调用此函数发送数据  

CTcpClient类主要方法如下所示。

RegsiterMsgToServer()函数:注册客户端要处理的消息处理函数。

ConnectServer()函数:连接服务器。

IsActive()函数:返回本网络客户端是否是连接状态。

CTcpServer类主要方法如下所示。

RegsiterMsgToServer()函数:注册服务端要处理的消息处理函数。

CreateServer()函数:创建服务端。

RunServer()函数:运行服务端。

IsRun()函数:检测服务端是否在运行。

StopServer()函数:停止运行服务端。

GetConnectSum()函数:取得此服务端已连接上的客户端数。

接下来将介绍如何使用以上介绍的网络传输单元模块。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇15.3.4 封装好的网络传输单元--类.. 下一篇15.2.4 本地监控示例--各进程CPU..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: