2017-05-31 4 views
-2

J'ai un message json à envoyer sur un QTcpSocket. Avant l'envoi du message, le message JSON est formaté comme ci-dessous:Quelle est la différence entre les chaînes Qt QString suivantes qui prennent une chaîne JSON en entrée? Utilisation de QTcpSockets

Cas 1:

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

Cas n ° 2: `

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

Lorsque QString est prêt, il est transmis sur QTcpSocket comme ci-dessous:

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

À la réception, le socket peut recevoir des données dans les deux cas. Mais lorsque les données reçues sont analysées à l'aide de QJsonDocument, le cas 1 échoue en donnant un document json vide, alors que Case 2 fonctionne en donnant le JsonDoc requis.

Voici le code de fin de réception:

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

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

Quelle est la différence entre les deux cas? Quelle est la meilleure approche entre les deux?

+0

quelle est la différence entre le cas 1 et 2 exactement ?? ils ont l'air identiques! – HazemGomaa

+0

Merci pour votre réponse Gomaa. Je l'ai résolu. Dans le premier cas,% 1 prend un argument de chaîne. Mais les citations manquent autour de lui. Quand j'ai ajouté des citations comme ci-dessous, son bon fonctionnement. 'Heartbeat = QString (" {\ "type_message \": \ "DetHeartbeat \", \ "Thread_Name \": \ "% 1 \", \ "detHeartbeat \":% 2} "). Arg (nom_fil) .arg (HbCount); ' – ringul

Répondre

0

Dans le premier cas,% 1 prend l'argument de chaîne. Mais les citations manquent autour de lui. Quand j'ai ajouté des citations comme ci-dessous, son bon fonctionnement.

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