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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值