⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 netengine.h

📁 采用完成端口的client/server DLL源码
💻 H
字号:
// NETENGINE_H

// =================================================================
// 网络引擎库,采用IOCP模型 
// ================================================================
// 作者(Aurthor):      姜云(FOX)
// 信箱(Email):        jiangyun@vip.citiz.net
// 日期(Developed On): 12.18.2003
// 更新(Last Update):  12.18.2003
// ================================================================
#ifndef NETENGINE_H_12_18_2003_
#define NETENGINE_H_12_18_2003_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//宏定义
#define DATA_BUFSIZE 8192
//头文件
#include "inetengine.h"
#include <winsock2.h>
#include <windows.h>
#include <list>
#include <iostream>
using namespace std;

class IUnKown
{
public:
	IUnKown( void ){
		m_dwCounter = 1;
	}
	virtual ~IUnKown( void ){
	}

public:
	//添加引用
	DWORD AddRef( void ){
		return (++m_dwCounter);
	}
	//释放引用
	DWORD Release( void ){
		if( --m_dwCounter == 0 ){
			delete this;
		}
		return m_dwCounter;
	}

private:
	DWORD m_dwCounter;//计数
};

//关键键
struct KEY{
	OVERLAPPED  s_sRecvOv; //recv重叠结构
	OVERLAPPED  s_sSendOv; //send重叠结构
	SOCKET		s_hSocket;//套接字句柄
	WSABUF		s_sRecvBuf;//recv缓冲结构
	WSABUF		s_sSendBuf;//send缓冲结构
	char		s_cBuffer[DATA_BUFSIZE];//缓冲区
	bool		s_bIsRecv; //是否为Recv消息
};

//用户节点
struct  UserNode{
	DWORD	s_dwUID;
	KEY*	s_pKey;
};

//网络引擎库,采用IOCP模型
//Server类型,多点交流
class NetEngineServer:IUnKown
{
public://类型定义
	typedef list<UserNode>		CListU;
	typedef list<DWORD>			CListDW;
	typedef CListU::iterator	CListUPointer;
	typedef CListDW::iterator	CListDWPointer;
	typedef bool (*MsgFun)( void* a_pBuffer );
	
public:
	NetEngineServer( MsgFun a_pFun,DWORD a_dwPort = 5000 );
	virtual ~NetEngineServer( void );

public:
	//工作线程
	static DWORD WINAPI ThreadFunc( LPVOID a_pVoid );
	//单件设计模式.this指针返回
	static NetEngineServer* Instance( MsgFun a_pFun = NULL );

public:
	//获取完全端口句柄
	HANDLE GetHandle( void );
	//消息监听
	bool Listen( void );

private:
	//获取新ID,防止重复
	DWORD GetNewID( void );
	//创建工作线程
	bool CreateWorkerThread( void );
	//初始化
	bool InitServer( DWORD a_dwPort );
	//内部消息处理
	bool MsgProcess( KEY* a_pKey );
	//连接断开处理
	bool CloseOneSocket( KEY* a_pKey );

private:
	SOCKET						m_Listen;//接受
	HANDLE						m_hCompletionPort;//重叠端口句柄
	MsgFun						m_pMsgProcessFun;//消息处理函数指针
	CListU						m_cUserList;//用户链表缓冲池
	CListDW						m_cIDList;//ID缓冲池
	DWORD						m_dwCurID;//当前分配到ID
	static NetEngineServer*		m_pMe;//对象指针(单件设计)
};

#endif //NETENGINE_H_12_18_2003_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -