HPSocket的使用(一、利用HPsocket 写一个TCP客户端)

37 篇文章 3 订阅
14 篇文章 1 订阅

一、前言

什么是HP socket?
参考链接:https://www.oschina.net/p/hp-socket
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。

HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。

二、利用HPSOCKET写一个TCP客户端

2.1 下载源码

HP-Socket 源代码下载地址:https://github.com/ldcsaa/HP-Socket

2.2 解压编译

在windows/project下,有许多工程,我选择用最新的2019
在这里插入图片描述

2.3 新建MFC工程

并将第二步生成的lib、dll以及include放在新建的工程下
在这里插入图片描述

2.4 代码编写

新建一个TCPClient的类,该类继承CTcpClientListener
在这里插入图片描述
重载基类中的这四个函数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

connect、disconn、Send函数
在这里插入图片描述

2.5 工程配置

包含库的引用目录,以及库的名字
在这里插入图片描述
在这里插入图片描述

2.6 界面

画一个简单的界面
在这里插入图片描述
在这里插入图片描述

效果如图所示,利用TCP测试工具打开一个服务端,输入IP地址,点击连接;
在这里插入图片描述
是不是很简单!

  • 1
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
HP-Socket一个基于IOCP的高性能TCP/UDP网络通信框架,可以在Windows平台下快速开发高性能的网络应用程序。下面是使用Qt调用HP-Socket实现TCP客户端的步骤: 1. 下载HP-Socket框架,解压后将include、lib、bin三个目录复制到Qt项目的根目录下。 2. 在Qt项目中添加以下代码实现TCP客户端的功能: ```cpp #include "stdafx.h" #include "HPTypeDef.h" #include "HPNetHelp.h" #include "HPClient.h" #include <QString> // HP-Socket事件处理类 class CListenerImpl : public CTcpClientListener { public: CListenerImpl() { m_pClient = nullptr; } ~CListenerImpl() { if (m_pClient != nullptr) { m_pClient->Destroy(); m_pClient = nullptr; } } EnHandleResult OnConnect(ITcpClient* pSender, CONNID dwConnID) { qDebug() << "OnConnect, Connection ID: " << dwConnID; return HR_OK; } EnHandleResult OnReceive(ITcpClient* pSender, CONNID dwConnID, const BYTE* pData, int iLength) { qDebug() << "OnReceive, Connection ID: " << dwConnID; QString strData = QString::fromLocal8Bit((char*)pData, iLength); qDebug() << "Received Data: " << strData; return HR_OK; } EnHandleResult OnClose(ITcpClient* pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode) { qDebug() << "OnClose, Connection ID: " << dwConnID << ", Operation: " << enOperation << ", Error Code: " << iErrorCode; return HR_OK; } void SetClient(CHttpClient* pClient) { m_pClient = pClient; } private: ITcpClient* m_pClient; }; // TCP客户端类 class CTcpClient { public: CTcpClient() { m_pListener = new CListenerImpl(); m_pClient = nullptr; } ~CTcpClient() { if (m_pClient != nullptr) { m_pClient->Destroy(); m_pClient = nullptr; } if (m_pListener != nullptr) { delete m_pListener; m_pListener = nullptr; } } bool Connect(LPCTSTR lpszAddress, USHORT usPort) { if (m_pClient != nullptr) { m_pClient->Destroy(); m_pClient = nullptr; } m_pClient = ::Create_HP_TcpClient(m_pListener); if (m_pClient == nullptr) { qDebug() << "Create_HP_TcpClient Failed!"; return false; } m_pListener->SetClient(this); if (!::HP_Client_Start(m_pClient, lpszAddress, usPort)) { qDebug() << "HP_Client_Start Failed!"; return false; } return true; } bool Send(LPCTSTR lpszData, int iLength) { if (m_pClient == nullptr) { qDebug() << "TCP Client Not Initialized!"; return false; } if (!::HP_Client_Send(m_pClient, (const BYTE*)lpszData, iLength)) { qDebug() << "TCP Client Send Failed!"; return false; } return true; } private: CListenerImpl* m_pListener; ITcpClient* m_pClient; }; int main(int argc, char* argv[]) { QCoreApplication a(argc, argv); CTcpClient tcpClient; if (!tcpClient.Connect(_T("127.0.0.1"), 5555)) { qDebug() << "TCP Client Connect Failed!"; return -1; } if (!tcpClient.Send(_T("Hello, HP-Socket!"), 18)) { qDebug() << "TCP Client Send Failed!"; return -1; } return a.exec(); } ``` 以上代码实现了一个TCP客户端,当连接建立成功、接收到数据、连接关闭时,将会调用相应的事件处理函数。可以根据需要在事件处理函数中添加自己的处理逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值