# iopcServerAndClient **Repository Path**: ccjabc/iopc-server-and-client ## Basic Information - **Project Name**: iopcServerAndClient - **Description**: 用c++实现iocp网络通信,并且支持扩展为select和epll网络模型 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-08-19 - **Last Updated**: 2025-08-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### 项目概述 这是一个基于Windows IOCP(完成端口)的高性能TCP服务器/客户端框架,支持: - 异步I/O模型(IOCP),高并发客户端连接(客户端可以模拟多个连接,进行压力测试) - 服务器和客户端均实现了心跳机制,自动检测断开连接 - 多线程设计,工作线程池处理业务逻辑。 - 消息连续性校验 - 支持流式消息(通过CELLMsgStream)的序列化和反序列化。 - 提供日志系统(CELLLog)、配置管理(CELLConfig)、时间工具(CELLTimestamp)等辅助模块。 项目结构: 客户端相关文件: 1. client.cpp:客户端入口,支持配置服务器地址、端口、线程数、客户端数等,创建多个工作线程,每个线程创建多个客户端连接到服务器,每个客户端定时发送消息,并处理服务器返回的消息。 2. EasyIOCPClient.hpp:继承自EasyTcpClient,使用IOCP模型处理网络事件;重写OnInitSocket和OnRun方法,使用IOCP进行异步收发;使用CELLIOCP对象管理IOCP操作。 3. EasyTcpClient.hpp:TCP客户端基类,提供基本的socket操作(初始化、连接、关闭等);管理客户端连接状态和收发缓冲区。 4. CELLClient.hpp:客户端连接管理类,处理数据收发、心跳检测、消息处理、数据收发缓冲区管理等。 服务器相关文件: 1. server.cpp:服务器主程序,支持配置服务器ip、端口、线程数等,创建MyServer(继承自EasyIOCPServer)并启动。并处理客户端连接和消息。 2. EasyIOCPServer.hpp:继承自EasyTcpServer,重写OnRun方法使用IOCP模型;在OnRun中创建IOCP并投递AcceptEx操作,等待客户端连接;处理客户端连接,将新客户端分配给工作线程。 3. EasyTcpServer.hpp:TCP服务器基类,Socket初始化,管理工作线程和客户端连接;提供初始化、绑定、监听、启动工作线程等方法。 4. INetEvent.hpp:网络事件接口,定义客户端加入、离开、消息等事件。 5. CELLServer.hpp:服务器工作线程类,管理客户端连接和消息处理;在新客户端加入时将其从缓冲队列转移到正式列表;心跳检测;处理网络事件(由子类实现DoNetEvents)和消息。 6. CELLIOCPServer.hpp:继承自CELLServer,实现IOCP模式下的网络事件处理;在DoNetEvents中为每个客户端投递收发操作,并处理IOCP完成事件;当新客户端加入时,将其关联到IOCP并投递接收操作。 公共文件: 1. CELLIOCP.hpp:封装IOCP操作,包括创建完成端口、异步操作投递(Recv/Send/Accept);提供等待I/O完成事件的方法。 2. CELL.hpp:包含跨平台的Socket定义和常用宏。 3. CELLBuffer.hpp:缓冲区管理类,用于网络数据的接收和发送。。 4. CELLConfig.hpp:配置管理类,用于解析命令行参数。 5. CELLLog.hpp:日志系统,支持多级别日志(Info, Debug, Warring, Error)和异步写入。 6. CELLMsgStream.hpp:消息流处理,包括`CELLReadStream`(用于读取消息)和`CELLWriteStream`(用于写入消息)。 7. CELLNetWork:网络基础功能封装,包括初始化网络环境、设置非阻塞模式、地址重用、无延迟等。 8. CELLSemaphore.hpp:- 信号量类,用于线程同步。 9. CELLStream.hpp:字节流处理类,用于数据的序列化和反序列化。 10. CELLTask.hpp:任务服务器类,用于执行异步任务。 11. CELLThread.hpp:线程管理类,封装了线程的创建、运行和销毁。 12. CELLTimestamp.hpp:时间戳工具,提供高精度时间测量。 13. MessageHeader.hpp:定义网络消息协议,包括消息头(`netmsg_DataHeader`)和具体的消息类型(登录、登出、心跳等) 项目工作流程: 1.visualStudio直接运行 2.打开EasyTcpClient/Debug/EasyTcpClient.bat和EasyTcpServer/Debug/EasyTcpServer.bat 3.EasyTcpClient/Debug目录下打开cmd,输入EasyTcpClient 对应参数 EasyTcpServer/Debug目录下打开cmd,输入EasyTcpServer 对应参数 服务器: 1. 启动服务器(server.cpp),解析配置参数。 2. 创建EasyIOCPServer对象,初始化socket、绑定、监听。 3. 启动工作线程(CELLIOCPServer),每个工作线程运行OnRun方法。 4. 主线程运行OnRun(在EasyIOCPServer中),使用IOCP处理连接请求(AcceptEx)。 5. 当新客户端连接时,将其分配给工作线程(CELLServer)。 6. 工作线程为每个客户端投递接收操作(IOCP),并处理完成事件(接收数据、发送数据)。 7. 处理客户端消息,触发事件(OnNetMsg)进行业务处理。 客户端: 1. 启动客户端(client.cpp),解析配置参数。 2. 创建工作线程,每个线程创建多个客户端(MyClient)对象。 3. 客户端连接服务器,并在连接成功后开始发送消息(如登录消息)。 4. 使用IOCP模型异步收发数据,处理服务器返回的消息。