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

📄 iocpbuffer.h

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

#if !defined(AFX_IOCPBUFFER_H__1245FDCA_AC2C_49EC_8E43_D946555086BC__INCLUDED_)
#define AFX_IOCPBUFFER_H__1245FDCA_AC2C_49EC_8E43_D946555086BC__INCLUDED_

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

#define MAXBUFLEN 4096	//传输缓冲区最大字节数,必须大于2*(sizeof(SOCKADDR_IN)+16)
#define KEYLEN sizeof(ULONG)	//标识字节数
#define MAXDATALEN (MAXBUFLEN-KEYLEN)	//最大数据字节数

enum IOTYPE
{
	IOTYPE_INITIALIZE=0, 
	IOTYPE_INIT_READ, 
	IOTYPE_INIT_WRITE, 
	IOTYPE_ACCEPTEX, 
	IOTYPE_READ, 
	IOTYPE_WRITE
};

class AFX_EXT_CLASS CIocpBuffer  
{
public:
	CIocpBuffer();
	virtual ~CIocpBuffer();
	
public:
	OVERLAPPED m_olBuffer;		//重叠结构
	SOCKET m_soSocket;			//临时保存套接字,AcceptEx请求才使用到
	int m_nSequenceNumber;		//请求读写时的顺序号
	int m_nSendLen;	//已发送长度
	
private:
	POSITION m_nPosition;		//在使用缓冲区数组中的位置
	int m_nIoType;				//Io操作类型
	WSABUF m_wsaBuf;	//网络传输缓冲区
	BYTE m_szBuffer[MAXBUFLEN];	//内存缓冲区
	int m_nBufLen;	//缓冲区长度
	CIocpPacket* m_pSendPacket;	//需要发送的数据包

public:
	ULONG GetKey();		//获得标识值
public:
	void ResetIoType(int nIoType);	//重设Io操作类型
	int GetIoType() {return m_nIoType;};		//获得Io操作类型
	
public:
	void SetPosition(POSITION nPos) {m_nPosition = nPos;if (nPos==NULL) m_nSendLen=0;};	//设置数组位置
	POSITION GetPosition() {return m_nPosition;};		//获得数组位置
	
public:
	int GetBufferLen() {return m_nBufLen;}	//读取缓冲区长度
	void SetBufferLen(int nBufLen) {m_nBufLen = nBufLen;};	//读数据后设置缓冲区长度
	void ResetBuffer();	//清空缓冲区
	BYTE* GetBuffer() {return m_szBuffer;};	//获得缓冲区地址
	void SetupBuffer(int nIoType);		//按Io操作类型设置缓冲区
	WSABUF* GetWSABuffer() {return  const_cast<WSABUF*>(&m_wsaBuf);};	//获得网络传输用的缓冲区地址
	int ProcessBuffer(CIocpPacket* pPacket);	//处理缓冲区数据
	BOOL SendBufferOver(int nIoSize);	//发送一次数据后重新设置缓冲区的值,并判断数据是否已发送完

	BOOL AddBufferData(const BYTE* szData, int nDataLen);	//添加缓冲区数据
	BOOL FlushBuffer(int nBufLen);		//移除缓冲区数据

public:
	CIocpPacket* GetPacket() {return m_pSendPacket;};	//获取传输数据包指针
	void SetPacket(CIocpPacket* pPacket) {if (pPacket!=NULL) m_pSendPacket=pPacket;};	//设置传输数据包指针
};

#endif // !defined(AFX_IOCPBUFFER_H__1245FDCA_AC2C_49EC_8E43_D946555086BC__INCLUDED_)

⌨️ 快捷键说明

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