基于 TCP 的通讯接口(TCP Utils)

TCPUtils是一个简单易用的TCP通讯接口,它在CentOS 6.5 x64环境下能稳定支持20多万个连接。该接口不处理协议解析,而是专注于数据收发和连接管理,降低了TCP通讯程序的复杂度。主要功能包括Server的端口监听和Connection的收发及断开处理。提供C++类包装,并包含示例和下载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

================================================================================
标题: 基于 TCP 的通讯接口(TCP Utils)
版本: 1.0.0.0
日期: 2016.07.25
--------------------------------------------------------------------------------

1. 概述

  可能很多人会说,TCP 通讯相关接口和类库都很多,何必再造个轮子呢?话虽如此,但TCPUtils 并不同于其它接口,其简单易用,且通过配置就可以实现大容量连接,并且具有高并发性。在 CentOS 6.5 x64 服务器中,单个服务端可以稳定 20 多万个连接同时在线,且收发顺畅,这是经过实际使用及压力测试。

  TCP 通讯接口是对 socket 进行包装,只负责接收和发送数据,不参与应用程序的协议解析通讯接口对接收和发送线程进行管理,简化了socket接口调用的复杂度。在使用 TCP 通讯过程中,即使程序再小都要考虑收发和断开连接等等相关问题,无形中增加了 TCP 通讯程序的复杂度。

  使用 TCPUtils 接口,开发人员只需要关心数据收发及连接断开后重连问题。特别是服务端程序,TCPUtils 帮助管理了客户连接,及连接受理和释放,简化了服务器程序难度。

  TCPUtils 包含 Server, Connection 二大类型,其主要功能如下:

  a. Server 主要负责端口侦听,以及 Connection 的受理分配和释放;

  b. Connection 主要负责数据的收发及连接断开事件;

  c. 可以创建/释放客户端的 Connection。


2. TCPUtils 下载

  TCPUtils10.rar  下载地址: http://pan.baidu.com/s/1sl7vmC9
  共享源码 sources 下载地址: http://pan.baidu.com/s/1i3ziOap
  共享产品 products 下载地址: http://pan.baidu.com/s/130O9o

3. TCPUtils 接口定义
  参见 <TCPUtils.h> 文件

// =======================================
// Unit   : 基于 TCP 的通讯接口
// Version: 1.0.0.0 (build 2016.07.24)
// Author : Kyee Ye
// Email  : kyee_ye(at)126.com
// Copyright (C) Kyee workroom
// =======================================

#ifndef _TCPUtils_H_
#define _TCPUtils_H_

// 在 windows 下需要加载 lib 文件
#if defined(_WIN64)
#pragma comment(lib, "TCPUtils64.lib")
#elif defined(_WIN32)
#pragma comment(lib, "TCPUtils32.lib")
#endif

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/* Linux 下无 __stdcall/__cdecl 修饰符, 为了兼容 Windows 下修饰符 */

#ifdef __linux

// __stdcall 宏定义
#ifndef __stdcall
#define __stdcall
#endif

// __cdecl 宏定义
#ifndef __cdecl
#define __cdecl
#endif

#endif

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/* 常量定义 */

// 返回值及错误码
enum TU_TTCPResult
        {TU_trSuccess         =  1,       // 成功
         TU_trFailure         =  0,       // 失败
         TU_trUnknown         = -1,       // 未知错误
         TU_trNotExist        = -2,       // 不存在(如: 连接对象)
         TU_trNotConnect      = -3,       // 连接未打开
         TU_trNonsupport      = -4,       // 不支持
         TU_trVersion         = -5,       // 版本不兼容
         TU_trTimeout         = -6,       // 操作超时
         TU_trPassword        = -7,       // 密码错误
         TU_trIsExisted       = -8,       // 已存在
         TU_trIsRefused       = -9,       // 被拒绝
         TU_trIsIllegal       = -10,      // 不合法
         TU_trIsNullName      = -11,      // 名字为空
         TU_trAttrInvalid     = -12,      // 属性无效
         TU_trStateInvalid    = -13,      // 状态无效
         TU_trHandleInvalid   = -14,      // 句柄无效
         TU_trAccessIllegal   = -15};     // 存取非法

// 接口的属性项
enum TU_TTCPAttrib
        {TU_taVersion         = 0,        // 接口版本信息, 格式: "x.x.x.x (build yyyy.mm.dd)"
         TU_taConnCount       = 1,        // 连接个数
         TU_taServerCount     = 2,        // 服务端个数
         TU_taSendThreads     = 3,        // 所有连接的发送线程最大个数, 默认值: 8
         TU_taSendCacheSize   = 4,        // 所有连接的发送线程缓冲池尺寸, 默认值: 8
         TU_taRecvThreads     = 5,        // 所有客户端的接收线程最大个数, 默认值: 8
         TU_taRecvCacheSize   = 6};       // 所有客户端的接收线程缓冲池尺寸, 默认值: 8

// 对象的状态
enum TU_TTCPObjState
        {TU_tosInactive       = 0,        // 未打开
         TU_tosClosing        = 1,        // 正在关闭
         TU_tosOpening        = 2,        // 正在打开
         TU_tosOpened         = 3};       // 已打开

// 连接的类型
enum TU_TTCPConnType
        {TU_tctUnknown        = 0,        // (未知)
         TU_tctClient         = 1,        // TCP 客户端连接
         TU_tctSrvClient      = 2};       // TCP 服务端的客户连接

// 服务端的属性项
enum TU_TTCPServerAttrib
        {TU_tsaOwner          = -1,       // 服务端所属对象(可以通过属性接口设置)
         TU_tsaError          = 0,        // 打开服务失败返回的错误信息
         TU_tsaState          = 1,        // 服务端的状态(TU_TTCPObjState)
         TU_tsaLinger         = 2,        // TCP 句柄关闭后的拖延时长(秒), 默认值: 0
         TU_tsaBindAddr       = 3,        // 服务端的绑定IP地址, 默认值: ""
         TU_tsaBindPort       = 4,        // 服务端的侦听端口号, 默认值: 0
         TU_tsaListenQueue    = 5,        // 服务端的侦听连接队列尺寸, 默认值: 256
         TU_tsaRecvThreads    = 6,        // 接收线程最大个数, 默认值: 8
         TU_tsaRecvCacheSize  = 7,        // 接收线程缓冲池尺寸, 默认值: 8
         TU_tsaMaxClientCount = 8,        // 服务端连接的最大客户端个数, 默认值: 0 表示无限制
         TU_tsaSrvClientCount = 9,        // 当前服务已连接的客户端个数
         TU_tsaSendQueue      = 10,       // 连接的发送队列尺寸, 默认值: 64, 其中 0 表示无队列
         TU_tsaKeepTimeout    = 11,       // 连接的心跳检测超时时间(单位: 毫秒), 默认值: 30000
         TU_tsaKeepInterval   = 12,       // 连接的心跳检测重试间隔(单位: 毫秒), 默认值: 10000
         TU_tsaKeepRetryTimes = 13,       // 连接的心跳检测重试次数, 默认值: 3

         // 回调事件属性, 取值范围: [32..63]
         TU_tsaOnDisconnect   = 32,       // 服务的 OnDisconnect     事件, 断开侦听(TU_TTCPOnEvent)
         TU_tsaOnAccept       = 33,       // 服务的 OnAccept         事件, 接受连接(TU_TTCPOnAccept), 可以设置连接属性
         TU_tsaOnFreeClt      = 34,       // 服务的 OnFreeClt        事件, 释放连接(TU_TTCPOnEvent)
         TU_tsaOnCltDisconnect= 35,       // 连接的 OnCltDisconnect  事件, 断开连接(TU_TTCPOnEvent)
         TU_tsaOnCltRecvEvent = 36};      // 连接的 OnCltRecvEvent   事件, 接收事件(TU_TTCPOnEvent)

// 连接的属性项
enum TU_TTCPConnAttrib
        {TU_tcaOwner          = -1,       // 连接所属对象(可以通过属性接口设置)
         TU_tcaError          = 0,        // 打开连接失败返回的错误信息(注: Type == TU_tctClient)
         TU_tcaType           = 1,        // 连接的类型(TU_TTCPConnType)
         TU_tcaState          = 2,        // 连接的状态(TU_TTCPObjState)
         TU_tcaSrvObj         = 3,        // 连接的服务端对象(注: Type == TU_tctSrvClient)
         TU_tcaLinger         = 4,        // 连接的句柄关闭后拖延时长(秒), 默认值: 0
         TU_tcaTimeout        = 5,        // 连接的打开超时(单位: 毫秒), 默认值: 30000
         TU_tcaPeerAddr       = 6,        // 连接的对端地址
         TU_tcaPeerPort       = 7,        // 连接的对端端口号
         TU_tcaCurrAddr       = 8,        // 连接的本地地址
         TU_tcaCurrPort       = 9,        // 连接的本地端口号
         TU_tcaLastTick       = 10,       // 连接的最后一次收发数据时 tick 值
         TU_tcaSendQueue      = 11,       // 连接的发送队列尺寸, 默认值: 64, 其中 0 表示无队列
         TU_tcaKeepTimeout    = 12,       // 连接的心跳检测超时时间(单位: 毫秒), 默认值: 30000
         TU_tcaKeepInterval   = 13,       // 连接的
RC 是 remote call 的缩写,顾名思义 RC32 为 32 位的远程调用接口,RC64 为 64 位 的远程调用接口,RC 基于TCP/IP 传输协议。 RC 分为二个部分:Client 端和 Server 端 1. Client 端的动态库名为 RC32c.dll/RC64c.dll,负责命令的发送与应答返回值的分发; 2. Server 端的动态库名为 RC32s.dll/RC64s.dll,负责接收Client端的请求并应答返回。 Client 端由三大类组成:Connection类、Command类和Fields类 1. Connection类主要负责与Server端的通讯和应答返回值的分发; 2. Command类主要负责命令参数编辑,提交及返回值读取操作; 3. Command执行请求可以阻塞等待应答返回值,也可以非阻塞立即返回,通过连接 Connection分发获取应答返回值; 4. Connection分发分为回调方式和查询方式,二者在一个Connection对象中只能 属于其中一种方式,而查询方式还可以分为阻塞和非阻塞读取; 5. Fields类主要负责数据库字段值的组包和拆包,以及字段定义集的组包和拆包。 Server 端由五大类组成:Server类、Application类、Function类、Response类和Fields类 1. Server类主要负责与Client端的连接和数据通讯; 2. Application类主要负责Function的组织和Response的分发; 3. Function类主要负责Function的定义及调用模式; 4. Response类主要负责Client端指定Function请求的处理,如参数读取、返回值 编辑及提交; 5. Applcation针对Client的请求连接可以通过OnConnect和OnDisconnect回调函数 得到连接ID,也可以通过RCSAppGetEvent函数得到; 6. 若Function的调用模式不是查询模式,则Client的请求应答由Application的处 理线程调用执行,否则必须调用RCSAppGetEvent函数得到Client的请求 应答ID,然后通过应答ID取参数和设置返回值等等操作,这时处理应答由外部程 序自己处理; 7. Fields类主要负责数据库字段值的组包和拆包,以及字段定义集的组包和拆包。 RC 压缩包中含有如下文件: -------------------------------------------------------------------------------- \RC 3.0\_documents\RC 开发使用说明_v30.chm \RC 3.0\_documents\RC 开发使用说明_v30.pdf \RC 3.0\_exports\Delphi\RC32c.pas \RC 3.0\_exports\Delphi\RC32s.pas \RC 3.0\_exports\VC6\RC32c.lib \RC 3.0\_exports\VC6\RC32s.lib \RC 3.0\_exports\VC6\RCClient.h \RC 3.0\_exports\VC6\RCServer.h \RC 3.0\_exports\VS2008_x64\RC64c.lib \RC 3.0\_exports\VS2008_x64\RC64s.lib \RC 3.0\_exports\VS2008_x64\RCClient.h \RC 3.0\_exports\VS2008_x64\RCServer.h \RC 3.0\_linux\_rc32\librc32c.so \RC 3.0\_linux\_rc32\librc32s.so \RC 3.0\_linux\_rc32\RC32c.h \RC 3.0\_linux\_rc32\RC32s.h \RC 3.0\_linux\classes\client\CmdQueue.cpp \RC 3.0\_linux\classes\client\CmdQueue.h \RC 3.0\_linux\classes\client\RC32c.h \RC 3.0\_linux\classes\client\RCClientObj.cpp \RC 3.0\_linux\classes\client\RCClientObj.h \RC 3.0\_linux\classes\server\KYConnHandles.cpp \RC 3.0\_linux\classes\server\KYConnHandles.h \RC 3.0\_linux\classes\server\RC32s.h \RC 3.0\_linux\classes\server\RCServerObj.cpp \RC 3.0\_linux\classes\server\RCServerObj.h \RC 3.0\_linux\demo\source_test_rc-centos5.4.tar.gz \RC 3.0\_rc32\RC32c.dll \RC 3.0\_rc32\RC32s.dll \RC 3.0\_rc32\TestRCClient.exe \RC 3.0\_rc64\RC64c.dll \RC 3.0\_rc64\RC64s.dll \RC 3.0\classes\client\Delphi2006\CmdQueue.pas \RC 3.0\classes\client\Delphi2006\RC32c.pas \RC 3.0\classes\client\Delphi2006\RCClientObj.pas \RC 3.0\classes\client\VC++\CmdQueue.cpp \RC 3.0\classes\client\VC++\CmdQueue.h \RC 3.0\classes\client\VC++\RC32c.lib \RC 3.0\classes\client\VC++\RC64c.lib \RC 3.0\classes\client\VC++\RCClient.h \RC 3.0\classes\client\VC++\RCClientObj.cpp \RC 3.0\classes\client\VC++\RCClientObj.h \RC 3.0\classes\server\Delphi2006\ConnFileHandles.pas \RC 3.0\classes\server\Delphi2006\RC32s.pas \RC 3.0\classes\server\Delphi2006\RCServerObj.pas \RC 3.0\classes\server\Delphi2006\RespQueue.pas \RC 3.0\classes\server\VC++\RC32s.lib \RC 3.0\classes\server\VC++\RC64s.lib \RC 3.0\classes\server\VC++\RCServer.h \RC 3.0\classes\server\VC++\RCServerObj.cpp \RC 3.0\classes\server\VC++\RCServerObj.h \RC 3.0\demo\TestFields(delphi2006)\[工程: TestClient.dpr, TestServer.dpr] \RC 3.0\demo\TestRC32(VC6)\[工程: TestRC32c.dsp, TestRC32s.dsp] \RC 3.0\demo\TestRC64(VS2008)\[工程: TestRC64c.vcproj, TestRC64s.vcproj] --------------------------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值