httpserver_QNetWorkClient

QHttpServer

cpp 复制代码
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 1. 创建QHttpServer
    server = new QHttpServer(this);

    // 2. 设置路由  cmd post 接受到cmd post 信息处理回调函数
    server->route("/api/cmd", QHttpServerRequest::Method::Post, [](const QHttpServerRequest &req){
        qDebug() << "[ POST ] /api/cmd";

        // 获取收到的信息内容
        QByteArray byte = req.body();

        // json 处理 存放错误原因
        QJsonParseError err;
        // 将byte 转换成 Document
        QJsonDocument doc = QJsonDocument::fromJson(byte, &err);
        
        // 判断json是否格式错误
        if(err.error != QJsonParseError::NoError){
            QJsonObject ret;
            ret["code"] = 400;
            ret["msg"] = "json parse error";
            return QHttpServerResponse(ret, QHttpServerResponder::StatusCode::BadRequest);
        }

        // 获取json
        QJsonObject obj = doc.object();
        QString cmd = obj["user"].toString();

        qDebug() << "recv_user : " << cmd;

        QJsonObject ret;
        ret["code"] = 200;
        ret["msg"] = "json parse successful";
        ret["recv_user"] = cmd;
        return QHttpServerResponse(ret);  发送ret json 数据
    });

    // 3. 创建tcpserver  监听10033端口 (10033 可换)
    QTcpServer *tcpServer = new QTcpServer(server);
    bool isListen = tcpServer->listen(QHostAddress::Any, 10033);
    if(!isListen) {
        qDebug() << "连接失败 listen";
        return;
    }

    // 4. 绑定tcpserver
    bool isBind = server->bind(tcpServer);
    if(!isBind) {
        qDebug() << "bind 失败";
        return;
    }

}

QNetWorkClient

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"

#include <QJsonObject>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>



Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    mgr = new QNetworkAccessManager(this);


}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_pushButton_clicked()
{
    QUrl url("http://127.0.0.1:10033/api/cmd");
    QNetworkRequest request(url);

    //声明发送json
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");

    QJsonObject json;
    json["user"] = "111";
    json["name"] = "445";
    json["password"] = "123456";

    QByteArray byte = QJsonDocument(json).toJson(QJsonDocument::Compact);

    QNetworkReply *reply = mgr->post(request, byte);

    connect(reply, &QNetworkReply::finished, this, [=](){
        if(reply->error() == QNetworkReply::NoError){
            qDebug() << "content" << reply->readAll();
        }else{
            qDebug() << "error" << reply->errorString();
        }

        reply->deleteLater();
    });
}
相关推荐
Evand J42 分钟前
【PMSM例程11】永磁同步电机(PMSM)基于UKF的转速与转子位置估计。附下载链接
算法·matlab·卡尔曼滤波·永磁同步电机·ukf·pmsm·位置估计
货拉拉技术1 小时前
记忆即智能:重构对话式AI Agent认知基座的四层渐进式记忆与自进化系统
人工智能·算法
杜 硕1 小时前
从零开始的C++生活——第六讲——02
c++·算法·生活
小超人诞生日记1 小时前
C++ STL 反向迭代器:从源码框架到适配器实现
c++·算法
青少儿编程课堂1 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会Scratch考级:校园成语接龙大挑战解析
c++·python·算法·bfs·信息学竞赛
老师我太想进步了20262 小时前
【数据结构-1】例解算法复杂度
数据结构·算法
tyler_download2 小时前
deepseek后训练算法:位置编码算法RoPE详解1
算法
青少儿编程课堂3 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会C/C++考级:分层图最短路解析
c++·python·算法·bfs·信息学竞赛
YSL0701243 小时前
一文通关-----排序
数据结构·算法