2016-07-05 12 views
-1

Ich habe folgende Code-Stück. Ich freue mich, die Struktur mit TCP IP in Qt zu senden, aber ich bin nicht in der Lage, es zu tun. Bitte helfen Sie mir, die Struktur zu senden.Um Struktur mit TCP IP in Qt senden

struct message 
{ 
    U8 messagedata; 
    U32 date; 
}msg; 

msg.messagedata = 30;

msg.date = 27;

dann mit write (msg, len (msg)) funtion zu senden. Aber wie man diese Struktur in diese Schreibfunktion einfügt. Ich verwende eingebaute Qt-Netzwerkbibliothek für TCP/IP.

Antwort

0

Versuchen:

QByteArray ba; 
ba << msg.messagedata << msg.date; 
socket.write (ba); 

Dies ist nur ein QByteArray an den Client sendet, müssen Sie auch die Größe senden (implementieren ein einfaches Protokoll).

1

Für die Arbeit mit TCP in Qt können Sie die Klassen QTcpSocket und QTcpServer verwenden. QTcpSocket erbt QIODevice Klasse, die Methode write hat, um Daten in Socket zu schreiben, wie Sie brauchen.

Für Sie Struktur senden, können Sie Sie Struktur packen:

#pragma pack(push, 1) 
struct message 
{ 
    quint8 messagedata; 
    quint32 date; 
}msg; 
#pragma pack(pop) 

und dann schreiben Methode verwenden, wie folgt aus:

socket->write(reinterpret_cast<char*>(yourMessage), sizeof(msg)); 

Alternative Art und Weise, können Sie implementieren Operator für QDataStream:

QDataStream &operator<<(QDataStream &stream, const msg &m) 
{ 
    stream << m.messagedata; 
    stream << m.date; 
} 

Und verwenden Sie es wie folgt:

QDataStream stream(socket); 
stream << yourMessage; 
+0

Was muss ich bei yourMessage Variable ?. –

+0

Sie können Ihre Daten in yourMessage eingeben. Zum Beispiel: msg yourMessage; yourMessage.messagedata = 30; yourMessage.date = 27; (wie Sie wollen in Frage) –