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

📄 iocpcontext.h

📁 iocp vc例子,自己是学DELPHI
💻 H
字号:
// IocpContext.h: interface for the CIocpContext class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_IOCPCONTEXT_H__080BC8C9_9E87_4C0F_949B_3CA3ACD855C9__INCLUDED_)
#define AFX_IOCPCONTEXT_H__080BC8C9_9E87_4C0F_949B_3CA3ACD855C9__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define MAXSEQUENCENUMBER 200000001 //最大的顺序号
#define MAXHASHSIZE 200001 //最大的哈希值
#define MAXKEYNUMBER 200000001 //最大的标识号

class CIocpManager;
typedef CMap<int, int, CIocpBuffer*, CIocpBuffer*> CBufferMap;

class AFX_EXT_CLASS CIocpContext  
{
public:
	CIocpContext();
	virtual ~CIocpContext();

public:
	SOCKET m_soContext;				//对应的套接字
	CCriticalSection m_csContext;
	int m_nNumberOfPengingIo;		//当前的I/O请求数,在ReleaseContext时用到
	SOCKADDR_IN m_saRemote;	//远程机器信息
	CIocpManager* m_pIocpMngr;

private:
	POSITION m_nPosition;	//记录数组中的位置
	
public:
	int EnterIoLoop();	//添加I/O请求数
	int ExitIoLoop();	//减少I/O请求数
	void SetPosition(POSITION pos) {m_nPosition = pos;};
	POSITION GetPosition() {return m_nPosition;};
	
	//发送或接收数据时顺序控制
public:
	CIocpBuffer m_bufPackage;	//若接收不足MAXBUFLEN长度,则用来保存数据的临时缓冲区
	int m_nSendSequenceNumber;			//需要发送的最大顺序号
	int m_nCurrentSendSequenceNumber;	//当前发送的请求顺序号
	CBufferMap m_mapSendBuffer;			//发送缓冲区数组

	int m_nRecvSequenceNumber;			//需要接收的最大顺序号
	int m_nCurrentRecvSequenceNumber;	//当前接收的请求顺序号
	CBufferMap m_mapRecvBuffer;			//接收缓冲区数组

	//网络传输包的控制
private:
	CCriticalSection m_csFreePacket;
	CPtrList m_plFreePacket;			//空闲的传输包
	CCriticalSection m_csUsedPacket;
	CPtrList m_plUsedPacket;			//使用的传输包
public:
	CIocpPacket* AllocatePacket(ULONG ulKey, WORD wType=PACKETTYPE_WRITE);	//分配包
	CIocpPacket* FindPacket(ULONG ulKey, WORD wType=PACKETTYPE_READ);	//查找包
	void ReleasePacket(CIocpPacket* pPacket);		//释放包
	void ReleasePacket(ULONG ulKey, WORD wType);		//释放包
	void FreePacket();					//释放空间
	
	//传输的唯一标识控制
private:
	ULONG m_ulKey;	//传输的唯一标识
public:
	ULONG GenerateKey();	//创建传输的唯一标识
	GUID GenerateGuid();	//为每个数据包创建GUID
};

#endif // !defined(AFX_IOCPCONTEXT_H__080BC8C9_9E87_4C0F_949B_3CA3ACD855C9__INCLUDED_)

⌨️ 快捷键说明

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