基于HTTP编写ping操作

devtools/2024/11/16 17:11:14/

基于HTTP编写ping操作

前言

在上一集我们就完成了创建MockServer的任务,那么我们就可以正式开始进行网络的通讯,那么我们今天就来基于HTTP来做一个客户端ping服务端的请求,服务端返回pong的响应。

需求分析

基于HTTP,实现ping功能,客户端给服务器发送一个HTTP请求,GET/ping

服务端返回一个响应,相应的正文中包含pong!

那么我们就要分别完成客户端和服务端的内容

客户端

分析

我们需要创建一个请求用于发送ping,我们给这个请求设置一个发送的URL,那么我们就用客户端的http客户端发送一个get请求,我们的这个请求作为我们的参数,返回值是一个响应,我们也用一个resp来接收它!


但是有一个问题,我们发送了请求是立即执行的,我们返回的内容不是那么快就能拿到的,响应还需要一定的时间。所以我们不能直接写代码就将这个响应的内容进行读出。所以我们需要让整个响应回来了,才能读取数据。

那么我们的Qt中的信号槽就可以实现这个功能,当我们的响应完全回来了,我们就会触发信号槽,之后先看看我们的响应是否有error,如果没有错误就可以读出body的数据了。记得一定要把我们的resp给延迟释放!

代码

void NetClient::ping()
{QNetworkRequest httpReq;httpReq.setUrl(QUrl(HTTP_URL + "/ping"));QNetworkReply* httpResp = httpClient.get(httpReq);connect(httpResp, &QNetworkReply::finished, this, [=](){//响应回来了if(httpResp->error() != QNetworkReply::NoError){LOG() << "HTTP请求失败!" << httpResp->errorString();httpResp->deleteLater();return;}QByteArray body = httpResp->readAll();LOG() << "响应内容:" << body;httpResp->deleteLater();});
}

这里我们的客户端的ping请求就写完了,我们继续来看服务端的内容。

服务端

服务端这边由于我们是有两个协议进行通信,那么我们就创建两个类来分别完成两个协议的方法。

我们这里暂时只先做HTTP的内容。

成员

我们需要有一个Qt里的HttpServer以及一个protobuffer的序列化器,我们同时把这个HttpServer也弄成单例模式的。那么我们就弄一个init方法,里面配置一个路由让我们能够回应我们的ping请求。

/** HTTP*/
class HttpServer : public QObject{Q_OBJECTprivate:static HttpServer* instance;HttpServer(){}QHttpServer httpServer;QProtobufSerializer serializer;public:static HttpServer* getInstance();//Http Server进行初始化bool init();
};

代码

我们这里监听所有ip,之后监听的是我们的8000端口号,这也是我们之前的常量提起过的。我们这里要配置路由,这样能够让我们更好的配合ping请求,收到请求后我们放回一个pong即可。

HttpServer* HttpServer::instance = nullptr;HttpServer *HttpServer::getInstance()
{if(instance == nullptr){instance = new HttpServer();}return instance;
}bool HttpServer::init()
{int ret = httpServer.listen(QHostAddress::Any,8000);//配置路由httpServer.route("/ping", [](const QHttpServerRequest& req){(void) req;qDebug() << "[http] 收到ping请求";return "pong";});return ret == 8000;
}

哦对,我们的ret接收的这个listen方法的数据是一个端口号。

我们这里就只需要弄一个listen,如果是Linux下的网络编程还要有bind等操作。

这个配置路由其实是请求的路径的映射。

启动服务进行测试

我们在服务器端的主函数里添加一些内容

HttpServer* httpServer = HttpServer::getInstance();if(!httpServer->init()){qDebug() << "HTTP 服务器启动失败!";return 1;}qDebug() << "HTTP 服务器启动成功!";

客户端也一样

#if TEST_NETWORKnetwork::NetClient netClient(nullptr);netClient.ping();

启动服务器

https://i-blog.csdnimg.cn/direct/d25165385de04358afcbfa58cac00173.png" width="307" />

再启动客户端

https://i-blog.csdnimg.cn/direct/9203d71af5464a2aa755af91304c8f60.png" width="504" />

https://i-blog.csdnimg.cn/direct/e425da593ab04863ae7d906fe7410fb2.png" width="776" />

就可以看到内容了,那么这一集就先到这里吧。


http://www.ppmy.cn/devtools/134482.html

相关文章

Java爬虫:获取商品历史价格信息 API 数据

穿越时空的购物侦探 引言 如果你以为Java只能用来制作乏味的桌面应用&#xff0c;那你一定没见识过它的另一面——一个能够穿越时空的购物侦探&#xff01;今天&#xff0c;我们就来聊聊如何用Java编写一个爬虫&#xff0c;这个爬虫不仅能获取商品的当前价格&#xff0c;还能…

校园服务平台小程序ssm+论文源码调试讲解

第2章 关键技术简介 2.1 微信小程序 微信小程序&#xff0c;简称小程序&#xff0c;英文名Mini Program&#xff0c;是一种全新的连接用户与服务的方式&#xff0c;可以快速访问、快速传播&#xff0c;并具有良好的使用体验[12]。 小程序的主要开发语言是JavaScript&#xff…

本地部署Apache Answer搭建高效的知识型社区并一键发布到公网流程

文章目录 前言1. 本地安装Docker2. 本地部署Apache Answer2.1 设置语言选择简体中文2.2 配置数据库2.3 创建配置文件2.4 填写基本信息 3. 如何使用Apache Answer3.1 后台管理3.2 提问与回答3.3 查看主页回答情况 4. 公网远程访问本地 Apache Answer4.1 内网穿透工具安装4.2 创建…

maven的optional选项说明以及具体应用

写在前面 本文看下maven的optional选项的作用和用法。 1&#xff1a;什么作用 考虑这样的场景&#xff0c;A依赖B&#xff0c;B依赖C&#xff0c;正常的按照依赖的传递性&#xff0c;A也会间接的依赖C&#xff0c;但是在一些特定的场景中项目A只希望依赖B&#xff0c;而不依…

【洛谷】T539820 202411A Giants

题目背景 Were wide awake now our eyes are wide openWere running this world we keeping it turningWere living like Giants.Yeah Giants.Were bigger than Giants.We Giants. 节选自《Giants》。 题目描述 在《迪迪卫》中&#xff0c;一次魔法的能量和五个参数有关&…

pycharm分支提交操作

一、Pycharm拉取Git远程仓库代码 1、点击VCS > Get from Version Control 2、输入git的url&#xff0c;选择自己的项目路径 3、点击Clone&#xff0c;就拉取成功了 默认签出分支为main 选择develop签出即可进行开发工作 二、创建分支&#xff08;非必要可以不使用&#xf…

faiss 提供了多种索引类型

faiss 多种索引类型 在 faiss 中&#xff0c;IndexFlatL2 是一个简单的基于 L2 距离&#xff08;欧几里得距离&#xff09;进行索引的索引类型&#xff0c;但实际上&#xff0c;faiss 提供了多种索引类型&#xff0c;支持不同的度量方式和性能优化&#xff0c;您可以根据需求选…

Java项目:校园宿舍管理系统(优质版)(Springboot3+Maven+Mybatis Plus+Vue3+ Element Plus+Mysql)

项目介绍 : Springboot3MavenMybatis PlusVue3 Element PlusMysql 开发的前后端分离的校园宿舍管理系统 项目演示: https://www.bilibili.com/video/BV16UmoYWEVR/ 运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 IDE环境&#x…