NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
# 2.2.1接口描述 ![](https://box.kancloud.cn/f359b31649bc01b78952b1ed0c9ef96b_1450x1909.png) ![](https://box.kancloud.cn/141c5136c6ab8749dc7b5f99143388b2_912x736.png) Server组件接口的继承层次结构如图2.2.1-1所示,其中,ITcpServer和IUdpServer继承于IServer,ITcpPullServer和ITcpPackServer则继承于ITcpServer。主要接口方法如表2.2.1-1所示,其它接口方法请参考**Src/SocketInterface.h**文件的相关注释: **IServer** ~~~ Start() 启动组件 Stop() 关闭组件 Send() 发送数据 SendPackets() 发送多组数据 Disconnect() 断开连接 DisconnectLongConnections() 断开长连接 DisconnectSilenceConnections() 断开静默连接 PauseReceive() 暂停接收数据 HasStarted() 检查通信组件是否已启动 GetState() 获取通信组件当前状态 GetConnectionCount() 获取连接数 GetConnectPeriod() 获取连接时长 GetSilencePeriod() 获取静默时长 GetAllConnectionIDs() 获取所有连接的CONNID GetLocalAddress() 获取某个连接的本地地址 GetRemoteAddress() 获取某个连接的远程地址 GetListenAddress() 获取监听Socket的地址 GetLastError() 获取最近一次失败操作的错误代码 GetLastErrorDesc() 获取最近一次失败操作的错误描述 SetWorkerThreadCount() 设置工作线程数量 SetMaxConnectionCount() 设置最大连接数量 ~~~ **ITcpServer** ~~~ SendSmallFile() 发送小文件 SetSocketListenQueue() 设置监听Socket的等候队列大小 SetAcceptSocketCount() Windows:设置Accept预投递数量 Linux:设置 EPOLL 事件最大数量 SetSocketBufferSize() 设置通信数据缓冲区大小 SetKeepAliveTime() 设置心跳检测包发送间隔 SetKeepAliveInterval() 设置心跳检测重试包发送间隔 ~~~ **ITcpPullServer** ~~~ Fetch() 拉取数据 Peek() 窥探数据 ~~~ **ITcpPackServer** ~~~ SetMaxPackSize() 设置最大包长限制 SetPackHeaderFlag() 设置包头校验标识 ~~~ **IUdpServer** ~~~ SetMaxDatagramSize() 设置数据报文最大长度 SetDetectAttempts() 设置检测重试次数 SetDetectInterval() 设置检测包发送间隔 ~~~ Server监听器接口的继承层次结构如图2.2.1-2所示,其中,ITcpServerListener和IUdpServerListener继承于IServerListener,接口回调事件如表2.2.1-2所示: **ISocketListenerT** ~~~ OnHandShake() 握手完成 握手完成时触发 OnSend() 数据已发送 数据发送成功后触发 OnReceive() [PUSH] 数据到达(PUSH / PACK) 接收到数据时触发 OnReceive() [PULL] 数据到达(PULL) 接收到数据时触发 OnClose() 连接关闭 连接正常或异常关闭时触发 ~~~ **IComplexSocketListenerT** `OnShutdown() 关闭通信组件 通信组件停止后触发` **IServerListenerT** ~~~ OnPrepareListen() 准备监听 绑定监听地址前触发 OnAccept() 接受连接请求 客户端连接请求到达时触发 ~~~ # 2.2.2工作流程 ![](https://box.kancloud.cn/0370c83dc23d958165b02998883df92f_869x1179.png) 图2.2.2-1展示了服务端、客户端应用程序与Server组件的交互流程: 服务端应用程序调用Start() 方法启动Server组件,如果调用成功则返回TRUE并收到OnPrepareListen事件。 客户端应用程序向服务端应用程序发起连接请求时,服务端应用程序将收到OnAccept和OnHandshake事件。 客户端应用程序向服务端应用程序发送数据时,服务端应用程序将收到OnReceive事件。 服务端应用程序调用Send() 方法向客户端应用程序发出数据后,服务端应用程序将收到OnSend事件。 断开连接时,服务端应用程序将收到OnClose事件。 服务端应用程序调用Stop() 方法关闭Server组件,如果调用成功则返回TRUE并收到OnShutdown事件。