2017-05-31 53 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); 
相关问题