在银河麒麟V4系统下使用Qt(程序方面)

简介

项目需求,在Qt软件下使用restful网络通信接口,进行json数据传输,主要包括了读取和发送数据,使用c++编程

restful网络通信模块

个人理解restful网络通信就是使用http://localhost:8080这种通信格式,
TCP通行就是用IP+端口号进行通信,仅仅是个人最简单的理解~
代码编写

客户端

在头文件中定义

private:
    Ui::Widget *ui;
    WSADATA mWasData;
    SOCKET mSocket;
    QString mAddrStr;
    QString url;

代码中通信部分,get请求

    // 创建QNetworkAccessManager对象
    QNetworkAccessManager* manager = new QNetworkAccessManager(this);
    // 构造HTTP请求
    QNetworkRequest request((QUrl(url)));
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
    QJsonObject json;
    QByteArray postData = QJsonDocument(json).toJson();

    // 发送HTTP get请求
    QNetworkReply* reply = manager->get(request);
    connect(reply, &QNetworkReply::finished, this,[=](){       
     if (reply->error() == QNetworkReply::NoError) {
		    //连接成功
        }
        else{
            //连接失败
        }

代码中通信部分,post请求

    // 创建QNetworkAccessManager对象
    QNetworkAccessManager* manager = new QNetworkAccessManager(this);
    // 构造HTTP请求
    QNetworkRequest request((QUrl(url)));
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
    QJsonObject json;
    json.insert("message", message);//message是自己给的
    QByteArray postData = QJsonDocument(json).toJson();
//    发送post请求
    QNetworkReply* reply = manager->post(request,postData);
    connect(reply, &QNetworkReply::finished, this,[=]() {
        if (reply->error() == QNetworkReply::NoError) {
            //连接成功
        }
        else{
            //连接失败
        }
               }

服务端

头文件

class RestfulServer : public QTcpServer {
    Q_OBJECT
public:
    RestfulServer(QObject *parent = nullptr) : QTcpServer(parent) {}
private:
    void incomingConnection(qintptr socketDescriptor) override;
};

source文件

void RestfulServer::incomingConnection(qintptr socketDescriptor) {
    // Create a new socket
    QTcpSocket *socket = new QTcpSocket(this);
    socket->setSocketDescriptor(socketDescriptor);

    // Read the HTTP request
    socket->waitForReadyRead();
    QByteArray requestData = socket->readAll();
    qDebug()<<requestData;
    QString requestString(requestData);
    QStringList requestLines = requestString.split("\r\n");
    // Parse the HTTP request
    QString requestMethod = requestLines[0].split(" ")[0];
    QString requestUrl = requestLines[0].split(" ")[1];
    QJsonObject requestBody;


    // Handle the HTTP request and send the response
    QJsonObject responseBody;

    if (requestMethod == "GET") {
        // Handle GET request
        responseBody["message"] = "This is a GET request";

    } else if (requestMethod == "POST") {
        // Handle POST request
        responseBody["message"] = "This is a POST request";
        responseBody["body"] = requestBody;
    } else {
        // Handle unsupported request
        responseBody["error"] = "Unsupported request method";
    }
    QJsonDocument responseDoc(responseBody);
    QByteArray responseData = responseDoc.toJson(QJsonDocument::Compact);

    socket->write("HTTP/1.1 200 OK\r\n");
    socket->write("Content-Type: application/json\r\n");
    socket->write(QString("Content-Length: %1\r\n").arg(responseData.size()).toUtf8());
    socket->write("\r\n");
    socket->write(responseData);
    socket->flush();
    // Close the socket
    socket->waitForBytesWritten();
    socket->disconnectFromHost();
    // 建立连接代码
    if (socket->state() == QAbstractSocket::ConnectedState) {
        socket->waitForDisconnected();
    }
    delete socket;
}

Json数据读取和发送——Json文件组成和解析方法

(1)使用QJsonObject,QJsonDocument ,QString 之间的转化和使用

QString parseData_type(const QString& jsonString) {
    QJsonDocument jsonResponse = QJsonDocument::fromJson(jsonString.toUtf8());
    QJsonObject jsonObject = jsonResponse.object();
    QString dataType = jsonObject.value("message").toString();
    QJsonObject messageObject = QJsonDocument::fromJson(dataType.toUtf8()).object();
    QJsonObject interFaceFile = messageObject.value("InterFaceFile").toObject();
    QJsonObject fileHeader = interFaceFile.value("FileHeader").toObject();
    QString data_type = fileHeader.value("Data_type").toString();
    return data_type;
}

上面的代码目的是解析Json文件中的数据。

(2)下面的代码显示QJsonArray用法

QJsonValue jsonValue(QString::fromStdString(zzghboshu.angleList[i].time.ToString()));

上面的代码把string类型转化为QJsonValue 类型,因为string类型不能直接使用append函数加到QJsonArray中

QJsonArray OuterArray;
QJsonObject outObj;
outObj["Moment"] = jsonValue;
outObj["Pitch_angle"] =zzghboshu.angleList[i].angle.pitch;
outObj["Yaw_angle"] = zzghboshu.angleList[i].angle.yaw;
OuterArray.append(outObj);

QJsonArray可以把QJsonObject塞进去,组成一个数组结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值