📄 iocpbuffer.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 + -