#if !defined(AFX_IOCPSRV_H__B2A29704_3F92_4CA6_B2BC_84261A30B2D0__INCLUDED_)
#define AFX_IOCPSRV_H__B2A29704_3F92_4CA6_B2BC_84261A30B2D0__INCLUDED_
/*
我的博客:http://blog.csdn.net/Sidyhe
采用相对效率高一些的存取算法,比一般的IOCP要快上许多
没有发送数据长度限制,想发多大就发多大(除非你故意分块)
接收数据没有长度限制,对方发来多大都能接收(别忒大就行,比如好几M)
被DDOS后挂掉的概率很低,我测试的时候没挂掉
欢迎测试各种BUG,有意见或建议请到我的博客上留言.
注意:不要修改头文件的内容,以免出错
*/
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "IOCPSrv.lib")
#ifdef __AFXWIN_H__//MFC程序需要忽略一个C语言的链接库,否则会出错
#ifdef _DEBUG
#pragma comment(linker, "/NODEFAULTLIB:msvcrtd.lib")
#else
#endif
#pragma comment(linker, "/NODEFAULTLIB:msvcrt.lib")
#endif
enum _E_NOTIFY
{
NOTIFY_NEWCLIENT, //有新连接,用于设置保活,自定义数据等信息(如:可用于IP黑名单).警告:不要设置超时信息
NOTIFY_GETDATA, //获得数据
NOTIFY_LOSTCLIENT //有客户断开连接
};
/*
回调函数是在多线程环境下的,操作临界资源的时候注意互斥/同步问题
eMsg: 传递给回调函数的消息类型(枚举类型,见上)
cSock: 客户端的SOCKET
IpAddr: 客户端的IP地址,ULONG型数据
UserData: 自定义数据,一般用于关联结构体,断开连接时务必回收内存,避免内存泄露
pBuffer: 指向缓冲区的地址,只有eMsg为NOTIFY_GETDATA时有效
Buffer_Size:缓冲区大小,只有eMsg为NOTIFY_GETDATA时有效
*/
typedef void (CALLBACK *NOTIFYPROC)(_E_NOTIFY eMsg, SOCKET cSock, ULONG IpAddr, LPVOID *UserData, LPBYTE pBuffer, ULONG Buffer_Size);
class CIOCPSrv
{
public:
CIOCPSrv();//会调用WSAStartup
virtual ~CIOCPSrv();//不会调用WSACleanup,需要的话自己调用清理SOCKET缓存
private:
PVOID m[7];
CRITICAL_SECTION m_CS_Link;
public:
//调用后自动开始监听接收数据,最大连接数0x7FFFFFFF
BOOL Initialize(USHORT uPort/*监听端口*/, DWORD dwMaxConnection/*最大连接数*/, NOTIFYPROC pNotifyProc/*回调函数*/);
//调用后停止IOCP,断开所有已连接的SOCKET
void UnInitialize();
//断开指定连接,调用之前确保已经回收UserData
void DisConnect(SOCKET cSock);
//断开所有连接,会触发回调函数(用于回收UserData)
void DisConnectAll();
//指定客户发送数据
BOOL Send(SOCKET cSocket, LPBYTE Buffer, ULONG BufferSize);
//向所有客户发送数据
void SendToAll(LPBYTE Buffer, ULONG BufferSize);
};
#endif
![avatar](https://profile-avatar.csdnimg.cn/7485e61bafdb42efa0276378fdd67038_sidyhe.jpg!1)
Sidyhe
- 粉丝: 113
- 资源: 9
最新资源
- SQL中的CREATE LOGFILE GROUP 语句.pdf
- C语言-leetcode题解之第172题阶乘后的零.zip
- C语言-leetcode题解之第171题Excel列表序号.zip
- C语言-leetcode题解之第169题多数元素.zip
- ocr-图像识别资源ocr-图像识别资源
- 图像识别:基于Resnet50 + VGG16模型融合的人体细胞癌症分类模型实现-图像识别资源
- C语言-leetcode题解之第168题Excel列表名称.zip
- C语言-leetcode题解之第167题两数之和II-输入有序数组.zip
- C语言-leetcode题解之第166题分数到小数.zip
- C语言-leetcode题解之第165题比较版本号.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)