2017-05-31 56 views
-2

我有一個json消息通過QTcpSocket發送。發送消息之前,將JSON消息被格式化如下:將Json字符串作爲輸入的以下Qt QStrings之間有什麼區別?使用QTcpSockets

情況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解析接收到的數據時,Case 1無法給出空的json文檔,而Case 2的工作是給出所需的JsonDoc。

這裏是接收端代碼:

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

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

是什麼這兩種情況之間的區別? 這兩者之間的最佳方法是什麼?

+0

情況1和2之間的區別是什麼?他們看起來一樣! – HazemGomaa

+0

感謝您的回覆Gomaa。我解決了它。在第一種情況下,%1正在接受字符串參數。但是引號缺失。當我加入如下的報價時,它的工作良好。 'Heartbeat = QString(「{\」messageType \「:\」DetHeartbeat \「,\」Thread_Name \「:\」%1 \「,\」detHeartbeat \「:%2}」)。arg(Thread_Name).arg (HbCount);' – ringul

回答

0

在第一種情況下,%1正在接受字符串參數。但是引號缺失。當我加入如下的報價時,它的工作良好。

Heartbeat = QString("{\"messageType\":\"Heartbeat\", \"Thread_Name\":\"%1\", \"Heartbeat\":%2}").arg(Thread_Name).arg(HbCount); 
相關問題