交流大侠的tcpiocp模块解决分包粘包现象
功能说明:该程序是一个基于Windows I/O Completion Port(IOCP)机制实现的高性能异步TCP客户端通信模块,专为易语言开发环境设计,用于构建可同时管理多个长连接TCP客户端的高并发网络应用。程序核心功能是封装底层Winsock异步I/O与IOCP线程池,提供简洁的API(如Connect、Disconnect、创建/销毁IOCP线程等),使开发者无需直接处理复杂的重叠I/O、完成端口调度和线程同步逻辑。其主流程包括:1)通过Create客户端IOCP线程完成全局初始化(WSA启动、创建完成端口、按CPU核心数×2动态创建工作线程并运行ThreadProc);2)调用Connect建立异步TCP连接,并在连接成功后自动将套接字绑定到完成端口,预投递首个WSARecv操作以接收协议头(长度为#head_len);3)工作线程ThreadProc持续调用GetQueuedCompletionStatus监听I/O完成事件,根据完成键(客户索引)和重叠结构类型(如#Recv)分发数据接收、解析(含包头校验、位置管理、缓冲区维护等预留逻辑)及回调通知;4)提供Disconnect主动断连与销毁客户端IOCP线程进行资源清理(安全关闭套接字、发送退出信号、等待/强制终止工作线程、关闭完成端口)。程序中定义了客户状态数组、套接字数组、回调函数指针数组、标识数组及完成端口句柄等关键变量,采用索引化管理多客户端,支持最大10个并发连接(由“10”维数组限定),并通过PacketHead、WSABuffer等结构为后续协议解析(如粘包处理、消息体读取)预留扩展接口。_临时子程序仅作调试用途,_启动子程序仅负责初始化调用,无业务逻辑。综上,本程序并非独立应用,而是一个可复用的底层网络通信支撑模块,典型应用场景包括:游戏登录/网关客户端、物联网设备接入代理、高频行情订阅终端、分布式任务下发Agent等需稳定、低延迟、高吞吐TCP通信能力的系统组件。
======程序集1
| |
| |------ _启动子程序
| |
| |------ _临时子程序
| |
| |
======WinSocket
| |
| |------ Call
| |
| |------ 创建客户端IOCP线程
| |
| |------ 销毁客户端IOCP线程
| |
| |------ Connect
| |
| |------ Disconnect
| |
| |------ ThreadProc
| |
| |------ GetIndex
| |
| |------ GetType
| |
| |------ SetType
| |
| |------ SetHead
| |
| |------ GetHead
| |
| |------ SetPos
| |
| |------ GetPos
| |
| |------ SetWSABuffer
| |
| |------ GetWSABuffer
| |
| |------ GetOldBuffer
| |
| |------ SetBuffLen
| |
| |------ GetBuffLen
| |
| |------ GetPacketHead
| |
| |------ CheckHead
| |
| |------ CheckRear
| |
| |------ PostWSARecv
| |
| |------ PostWSASend
| |
| |------ GetData
| |
| |------ SendData
| |
| |------ CreateOverlapped
| |
| |------ Release
| |
| |------ Release2
| |
| |------ mAlloc
| |
| |------ mFree
| |
| |
======TCP客户端
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 连接
| |
| |------ 断开
| |
| |------ 取回数据
| |
| |------ 发送数据
| |
| |
======调用的Dll
| |
| |---[dll]------ WSAStartup
| |
| |---[dll]------ WSACleanup
| |
| |---[dll]------ closesocket
| |
| |---[dll]------ htons
| |
| |---[dll]------ inet_addr
| |
| |---[dll]------ WaitForSingleObject
| |
| |---[dll]------ GetLastError
| |
| |---[dll]------ WSARecv
| |
| |---[dll]------ WSASend
| |
| |---[dll]------ CreateIoCompletionPort
| |
| |---[dll]------ GetQueuedCompletionStatus
| |
| |---[dll]------ PostQueuedCompletionStatus
| |
| |---[dll]------ WSASocket
| |
| |---[dll]------ GetSystemInfo
| |
| |---[dll]------ CloseHandle
| |
| |---[dll]------ RtlMoveMemory_int_1
| |
| |---[dll]------ RtlMoveMemory_int_2
| |
| |---[dll]------ RtlMoveMemory_short_1
| |
| |---[dll]------ RtlMoveMemory_short_2
| |
| |---[dll]------ RtlMoveMemory_byte_1
| |
| |---[dll]------ RtlMoveMemory_byte_2
| |
| |---[dll]------ CreateThread
| |
| |---[dll]------ TerminateThread
| |
| |---[dll]------ GetExitCodeThread
| |
| |---[dll]------ GetTickCount
| |
| |---[dll]------ connect
| |
| |---[dll]------ VirtualAlloc
| |
| |---[dll]------ VirtualFree
======程序集1
| |
| |------ _启动子程序
| |
| |------ _临时子程序
| |
| |
======核心程序集
| |
| |------ Call
| |
| |------ Start
| |
| |------ Stop
| |
| |------ GetClientInf
| |
| |------ GetData
| |
| |------ SendData
| |
| |------ 事件线程
| |
| |------ 处理线程
| |
| |------ 重置overlapped
| |
| |------ PostAcceptEx
| |
| |------ PostWSARecv
| |
| |------ PostWSASend
| |
| |------ SetSocket
| |
| |------ GetSocket
| |
| |------ SetType
| |
| |------ GetType
| |
| |------ SetHead
| |
| |------ GetHead
| |
| |------ SetPos
| |
| |------ GetPos
| |
| |------ SetWSABuffer
| |
| |------ GetWSABuffer
| |
| |------ GetOldBuffer
| |
| |------ SetBuffLen
| |
| |------ GetBuffLen
| |
| |------ GetPacketHead
| |
| |------ CheckHead
| |
| |------ CheckRear
| |
| |------ CreateSocket
| |
| |------ CreateOverlapped
| |
| |------ DestroyOverlapped
| |
| |------ Release
| |
| |------ Release2
| |
| |
======TCP服务器
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 启动
| |
| |------ 停止
| |
| |------ 取回客户
| |
| |------ 取回数据
| |
| |------ 发送数据
| |
| |------ 断开客户
| |
| |
======调用的Dll
| |
| |---[dll]------ GetProcessHeap
| |
| |---[dll]------ HeapAlloc
| |
| |---[dll]------ HeapFree
| |
| |---[dll]------ HeapCreate
| |
| |---[dll]------ HeapDestroy
| |
| |---[dll]------ HeapReAlloc
| |
| |---[dll]------ CreateIoCompletionPort
| |
| |---[dll]------ GetQueuedCompletionStatus
| |
| |---[dll]------ PostQueuedCompletionStatus
| |
| |---[dll]------ CloseHandle
| |
| |---[dll]------ GetSystemInfo
| |
| |---[dll]------ RtlMoveMemory_Bin_1
| |
| |---[dll]------ RtlMoveMemory_Bin_2
| |
| |---[dll]------ RtlMoveMemory_int_1
| |
| |---[dll]------ RtlMoveMemory_int_2
| |
| |---[dll]------ CreateThread
| |
| |---[dll]------ TerminateThread
| |
| |---[dll]------ GetLastError
| |
| |---[dll]------ GetTickCount
| |
| |---[dll]------ GetExitCodeThread
| |
| |---[dll]------ WaitForSingleObject
| |
| |---[dll]------ RtlMoveMemory_sockaddr_in
======窗口程序集1
| |
| |------ __启动窗口_创建完毕
| |
| |------ 网络事件回调函数
| |
| |------ 数据合并子程序
| |
| |------ _按钮3_被单击
| |
| |------ 数据传送子程序
======窗口程序集
| |
| |------ __启动窗口_创建完毕
| |
| |------ 初始化子程序
| |
| |------ 网络事件回调函数
| |
| |------ 数据合并子程序
| |
| |------ 子程序1
| |
| |------ _按钮1_被单击
注:本站源码主要来源于网络收集。如有侵犯您的利益,请联系我们,我们将及时删除!
部分源码可能含有危险代码,(如关机、格式化磁盘等),请看清代码在运行。
由此产生的一切后果本站均不负责。源码仅用于学习使用,如需运用到商业场景请咨询原作者。
使用本站源码开发的产品均与本站无任何关系,请大家遵守国家相关法律。