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();
});
}
