HP-Socket 是一套通用的高性能 TCP/UDP /HTTP 通信 框架 ,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP /HTTP 通信系统,提供 C/C++ 、 C# 、 Delphi 、 E (易语言)、 Java 、 Python 等编程语言接口。
HP-Socket包含30多个组件 ,可根据通信角色Client/Server)、通信协议TCP/UDP/HTTP)和接收模型PUSH/PULL/PACK)进行归类,支持PUSH、PULL和PACK三种接收模型。
目录
简介
使用方式
实现简单线程池
实现TCP客户端
实现TCP服务端
实现Http客户端
附件
HP-Socket是一套国产的开源通讯库,使用C++语言实现,提供多种编程语言的接口,支持 Windows 和 Linux 平台:
官网:http://www.hpsocket.net/
github:https://github.com/ldcsaa/HP-Socket
HP-Socket包含30多个组件 ,可根据通信角色Client/Server)、通信协议TCP/UDP/HTTP)和接收模型PUSH/PULL/PACK)进行归类,这里只简单介绍一下:
Server组件:基于IOCP/EPOLL通信模型 ,并结合缓存池 、私有堆等技术实现高效内存管理,支持超大规模、高并发通信场景。
Agent组件:实质上是Multi-Client组件,与Server组件采用相同的技术架构,可同时建立和高效处理大规模Socket连接 。
Client组件:基于Event Select/POLL通信模型,每个组件对象创建一个通信线程并管理一个Socket连接, 适用于小规模客户端场景。
Thread Pool组件:HP-Socket实现的高效易用的线程池组件,当成普通的第三方线程池库使用即可。
HP-Socket的TCP组件支持PUSH、PULL和PACK三种接收模型:
PUSH模型:组件接收到数据时会触发监听器对象的OnReceive(pSender,dwConnID,pData,iLength)事件,把数据“推”给应用程序,这种模型使用起来是最自由的。
PULL模型:组件接收到数据时会触发监听器对象的OnReceive(pSender,dwConnID,iTotalLength)事件 ,告诉应用程序当前已经接收到多少数据,应用程序检查数据的长度,如果满足需要则调用组件的**Fetch(dwConnID,pData,iDataLength)方法把需
要的数据“拉”出来。
PACK模型:PACK模型系列组件是PUSH和PULL模型的结合体,应用程序不必处理分包与数据抓取,组件保证每个OnReceive事件都向应用程序提供一个完整数据包。
注:PACK模型组件会对应用程序发送的每个数据包自动加上 4 字节(32位的包头),前10位为用于数据包校验的包头标识位,后22位为记录包体长度的长度位。
HP-Socket支持MBCS和Unicode字符集,支持32位和64位应用程序。可以通过源代码、 DLL或LIB方式使用HP-Socket。 HP-Socket发行包中已经提供了HPSocket DLL和HPSocket4C DLL。 HP-Socket提供了各种情况下的dll文件,不需要我们重新编译,dll文件按编程接口分为两大类:
HPSocket DLL:导出C++编程接口 ,C++程序的首选方式,使用时需要把SocketInterface.h(及其依赖文件HPTypeDef.h) 、HPSocket.h以及 DLL 对应的 *.lib 文件加入到工程项目,用到SSL组件还需要HPSocket-SSL.h文件。

HPSocket4C DLL:导出C编程接口,提供给C语言或其它编程语言使用,使用时需要把HPSocket4C.h以及 DLL 对应的 *.lib 文件加入到工程项目,用到SSL组件还需要HPSocket4C-SSL.h文件。
使用HP-Socket的线程池组件可以在程序中实现一个简单的、公用的线程池,TCP通讯的断线重连、发送心跳都会用到线程池。线程池组件的主要函数如下:
Start:启动线程池,具体的使用可以参考源代码的注释。
Submit:提交任务,主要使用BOOL Submit(fnTaskProc,pvArg,dwMaxWait=INFINITE),另一个函数重载是使用一个特殊的数据类型(把Socket任务参数和任务函数封装成一个数据结构)作为参数。
Stop:关闭线程池,参数dwMaxWait代表最大等待时间(毫秒,默认: INFINITE ,一直等待)。
先实现线程池的CHPThreadPoolListener接口,然后构造IHPThreadPool智能指针,后面线程池的操作都通过智能指针操作,代码如下:
先实现一个打印函数,显示客户端相关的信息,代码如下:
实现CTcpClientListener监听接口,客户端断线后自动重连,以换行符分割接收到的字符串,代码如下:
循环输入字符串发送服务端,代码如下:
先实现一个打印函数,基本上和客户端的相同,只有获取本地IP的地方不同,代码如下:
为了演示客户端和应用数据的绑定,定义一个用户数据类型并创建一个队列,代码如下:
实现CTcpServerListener监听接口,收到字符串后加上用户名再发送回去,代码如下:
循环输入字符串发送到客户端,自动回复客户端发送的消息,代码如下:
注:获取连接时指针数组的长度一定要大于当前连接数量,否则会失败。
HP-Socket的Http客户端有同步、异步两种,同步客户端不需要绑定监听器,这里使用同步客户端演示。
Sync Client:同步HTTP客户端组件(CHttpSyncClient和CHttpsSyncClient)内部会处理所有事件,因此,它们不需要绑定监听器(构造方法的监听器参数传入null); 如果绑定了监听器则可以跟踪组件的通信过程。
测试客户端可以使用实时天气接口上面的测试示例,当前的测试示例为:
直接开始测试,代码如下:
上面的StringToUtf和UtfToString函数是转载至C++ 中文乱码的问题,该函数实现UTF-8和ANSI编码格式的转化,代码如下:
注:函数实现需放在main函数之前。
HP-Socket-5.8.5 源码+dll+文档 提取码: a4cq
项目源码 提取码: xpgg