微科社区,轻松开发从此开始! 请登陆 免费注册

微科社区

当前位置:首页 > 编程语言 > C/C++ > VC/MFC > 网络编程 >

IOCP_API之TCP服务器编程

时间:2017-01-11 04:01  浏览:努力统计中...
本文基于沈毅(shenyi0106@163.com qq:52851771)所提供的IOCP_API组件来搭建TCP服务器。 下载地址: http://download.csdn.net/source/2960211 本文适用于对winsock有一定了解的开发者,当然,如果你不了解wi
本文基于沈毅(shenyi0106@163.com qq:52851771)所提供的IOCP_API组件来搭建TCP服务器。
下载地址:http://download.csdn.net/source/2960211
  本文适用于对winsock有一定了解的开发者,当然,如果你不了解winsock也没有关系,IOCP_API为您提供了高度封装的API,您只需要定义几个回调函数,调用几个API即可完成服务器搭建工作,使您可以专注于业务逻辑处理,而无需了解了解通讯底层。

  如果您需要解压缩支持,可以加上Compress.h头文件;如果需要提供大数据包支持,可以加上Packet.h头文件。

   
  下面将介绍如何使用IOCP_API组件:
  首先,导入IOCPServer.h头文件。如果你的工程中不包括socket支持,那查看IOCPServer.h头文件,将部分注释打开。
  其次,定义回调函数。共有三个回调函数,分别是数据处理回调,连接处理回调和连接关闭回调,定义格式如下:

 
C/C++ code
//数据处理回调 void DataProcCallBack(SOCKET socket, char * recvBuf, int len); //连接处理回调 BOOL OnConn(SOCKET socket, char * ip, int port); //连接关闭回调 void OnClientClose(SOCKET socket, char * ip, int port);

  如果是定义类成员函数,请将函数定义成静态成员函数,原因省略万字......

  再次,调用IOCP_API的函数初始化并启动服务器:
 
C/C++ code
HANDLE m_hIocp = IOCPInitServer(DataProcCallBack,OnConn,OnClientClose,4,5000,10);
其中各个参数的意义,请参考IOCPServer.h头文件中的说明。

 
C/C++ code



  最后,如果你在初始化时已经设置了线程池模式,那么你只需要在你的DataProcCallBack函数里专心处理你自己的业务逻辑即可。当然这里不用线程池模式也可以,完全取决于你自己的业务需求。
   
  如果需要回发数据,通过IOCPSend函数发送。


  在此组件中还提供很多其他的辅助功能,比如:
  调用IOCPCloseClient可以强制关闭某个连接,IOCPGetClientCount可以获得当前客户端数,IOCPGetSocketName获得本地IP信息,IOCPGetPeerName获得远端IP信息,
  IOCPSetUserData可以设置句柄相关的任何数据,IOCPGetUserData获得句柄相关的任何数据。

  性能怎么说呢,由于没有测试环境,只做过三四台机器5K多的echo(500ms间隔)并发测试,服务器是普通的双核PC,100M网络,只能说资源占用率比较低,CPU控制在10%以下,内存占用也很低。
还有 ,虽然能编译通过 F7也无问题,但是发现这个程序没有main函数 ,也没有winmain函数,搜索只有这个带MAIN的函数 VOID WINAPI ServiceMain() why? 

  程序的不足:
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线------