轻量级网络引擎styleman_network 
styleman_network网络引擎v1.0简要说明:
 本网络引擎100%保证数据包完整性,程序健壮无bug,无内存泄露,而且是线程安全的.获取地址
1.http://download.csdn.net/source/3168015
2.qq群 10072269

解决方案 »

  1.   

    #pragma once/************************************************************************/
    /* 
      服务端网络引擎接口
     
    */
    /************************************************************************/   
    //回调处理数据函数原型
    typedef VOID WINAPI ServerProcessRecvData( DWORD dwNetworkIndex , BYTE *pMsg , WORD wSize );class INetEngine
    {
     public:
     
    //virtual ~INetEngine(void)=0; //是否已初始化监听
    virtual BOOL IsListening()=0; //网络初始化
    virtual BOOL Init(char* IP, WORD Port , ServerProcessRecvData* pProcessRecvData , DWORD MaxConnectNum )=0; //停止网络服务
    virtual VOID Shutdown()=0; //网络更新
    virtual VOID Update()=0; //单个断开
    virtual BOOL DisConnect( DWORD dwNetworkIndex )=0; //指定发送
    virtual BOOL Send( DWORD dwNetworkIndex , BYTE *pMsg , WORD wSize )=0; 

    //发送给所有
    virtual BOOL SendToAll( BYTE *pMsg , WORD wSize )=0;  //发送给所有,但排除except
    virtual BOOL SendToOtherAll(DWORD except , BYTE *pMsg , WORD wSize )=0; //得到当前总连接数
    virtual DWORD GetNumberOfConnections()=0; //得到ip
    virtual char* GetIP( DWORD dwNetworkIndex )=0; //设置心跳超时.当客户超过这段时间,没有给服务器发送一包消息,就断定他断开了.
    virtual void SetHeartbeatTimeOut(DWORD timeout)=0;//单位秒 //设置连接超时.当客户连接到服务端后.没有发送一包消息.超过这段时间,就把他断开.防止恶意空闲连接.
    virtual void SetConnTimeOut(DWORD timeout)=0; //单位秒
    };
    /************************************************************************/
    /* 
        客户端网络引擎接口*/
    /************************************************************************/
      //回调处理数据函数原型
    typedef VOID WINAPI ClientProcessRecvData( BYTE *pMsg , WORD wSize );class INetClient
    {
     
    public:
    //连接服务器
    virtual BOOL Connect(const char* ServerIP, WORD Port , ClientProcessRecvData* pProcessRecvData )=0; //断开连接
    virtual BOOL DisConnect( )=0; //指定发送
    virtual BOOL Send( BYTE *pMsg , WORD wSize )=0;};//server socket io模型
    enum eSERVER_SOCKET_IO_MODEL
    {
    eSELECT_THREADPOOL=0, //select+线程池
    eWSASYNSELECT, //WSAAsyncSelect
    };
       //创建服务端网络引擎
    NETWORK_API INetEngine*   CreateNetEngine(eSERVER_SOCKET_IO_MODEL IO_mode,char*IP, WORD Port , ServerProcessRecvData* pProcessRecvData , DWORD MaxConnectNum );//销毁服务端网络引擎
    NETWORK_API VOID   DestroyNetEngine( INetEngine* net );
    //创建客户端网络引擎
    NETWORK_API INetClient*   CreateNetClient(const char* ServerIP, WORD Port , ClientProcessRecvData* pProcessRecvData );//销毁客户端网络引擎
    NETWORK_API VOID   DestroyNetClient( INetClient* net );
      

  2.   

    #include "INetEngine.h"
    #include <conio.h>
     
    struct STest
    {
    int cmd; DWORD time;
    char b[1024];
    int a;
    };
     #include "INetEngine.h"INetEngine* net;//网络消息处理
    void WINAPI RecvDataCall(DWORD dwNetworkIndex , BYTE *pMsg, WORD wSize)

    if( wSize == 0 || pMsg == NULL ) //客户退出了
    {
    printf("[%d]退出\n",dwNetworkIndex );
    return;
    }else{ STest s;
    memcpy((BYTE*)&s,pMsg,sizeof(STest));
    printf("客户id[%d] ip[%s] recv size:%d a:%d  用时time:%d\n",dwNetworkIndex, net->GetIP(dwNetworkIndex),  wSize,s.a ,   s.time ); net->Send(dwNetworkIndex,pMsg,wSize);//简单echo
     
    }
    }
    INetEngine* net2;
    void WINAPI RecvDataCall2(DWORD dwNetworkIndex , BYTE *pMsg, WORD wSize)

    if( wSize == 0 || pMsg == NULL ) //客户退出了
    {
    printf("[%d]退出\n",dwNetworkIndex );
    return;
    }else{ STest s;
    memcpy((BYTE*)&s,pMsg,sizeof(STest));
    printf("客户id[%d] ip[%s] recv size:%d a:%d  用时time:%d\n",dwNetworkIndex, net2->GetIP(dwNetworkIndex),  wSize,s.a ,   s.time ); net2->Send(dwNetworkIndex,pMsg,wSize);//简单echo }
    }//-------------------------------------------------------------------------------------------------
    // Main
    //-------------------------------------------------------------------------------------------------
     
    int _tmain(int argc, _TCHAR* argv[])
    {
     
    int port=123;
    net= CreateNetEngine(eSELECT_THREADPOOL, "0.0.0.0" ,port,RecvDataCall,555); //创建网络引擎
    if(net)
    {
    printf("CreateNetEngine eSELECT_THREADPOOL ok! listen [%d] ok\n",port);
    }else{
    printf("CreateNetEngine eSELECT_THREADPOOL err! listen err\n");
    return 0;
    } net2= CreateNetEngine(eWSASYNSELECT, "0.0.0.0" ,port+1,RecvDataCall2,2000); //创建网络引擎
    if(net2)
    {
    printf("CreateNetEngine eWSASYNSELECT ok! listen [%d] ok\n",port+1);
    }else{
    printf("CreateNetEngine eWSASYNSELECT err! listen err\n");
    return 0;
    }
    printf("按任意键退出\n"); DWORD last=::GetTickCount();
    while( net->IsListening() )
    {
    if (kbhit())
    {
    break;
    } Sleep(10);

    net->Update();
    net2->Update(); if(GetTickCount()-last>2000)
    {
    last=GetTickCount(); printf("1有[%d]个客户连接 2有[%d]个客户连接\n",net->GetNumberOfConnections() ,net2->GetNumberOfConnections() );
    }
    } printf("销毁网络引擎中!~\n");  DestroyNetEngine(net);//销毁网络引擎
    DestroyNetEngine(net2);//销毁网络引擎
    printf("DestroyNetEngine完毕\n"); return 0;
    }
      

  3.   

    本网络引擎100%保证数据包完整性,程序健壮无bug,无内存泄露,而且是线程安全的