-1

我有一条 json 消息要通过 QTcpSocket 发送。在发送消息之前,Json 消息的格式如下:

情况1 :

//Heartbeat = QString("{\"messageType\":\"Heartbeat\", \"Thread_Name\":%1, \"Heartbeat\":%2}").arg(Thread_Name).arg(HbCount);  //clients Heartbeat

案例2:`

Heartbeat = QString("{ \
                    \"messageType\":\"Heartbeat\",\
                    \"Thread_Name\":\"%1\", \
                    \"Heartbeat\":%2 \
                   }").arg(Thread_Name).arg(HbCount);  //clients Heartbeat

当 QString 准备好时,它通过 QTcpSocket 传输,如下所示:

_pSocket->write(Heartbeat.toLatin1());
_pSocket->flush();
_pSocket->waitForBytesWritten();

在接收端,套接字在这两种情况下都能接收数据。但是当使用 QJsonDocument 解析接收到的数据时,案例 1 无法提供空的 json 文档,而案例 2 可以提供所需的 JsonDoc。

这是接收端代码:

QByteArray Data = socket->readAll(); //read data from socket in to a QByteArray

QJsonDocument JsonDoc = QJsonDocument::fromJson(Data); //convert QByteArray to QJsonDocument

两种情况有什么区别?两者之间最好的方法是什么?

4

1 回答 1

0

在第一种情况下,%1 采用字符串参数。但是它周围没有引号。当我添加如下引号时,它工作得很好。

Heartbeat = QString("{\"messageType\":\"Heartbeat\", \"Thread_Name\":\"%1\", \"Heartbeat\":%2}").arg(Thread_Name).arg(HbCount);
于 2017-05-31T18:29:51.370 回答