Beispiel:
Du sendest ein <jetzt kommt ein bild>, der Empfänger ließt das und merkt sich (dafür gibt's Variablen...), dass als nächstes ein Bild kommt. Danach sendest du Das Bild und ein <jetzt kommt wieder ein Bild>. Oder alternativ <jetzt kommt eine spezielle Information>. Diese kleinen Einlagen (<das da>) muss natürlich immer auf die selbe Art und Weise gelesen werden, im einfachsten Fall als ein Byte. Die Art und Weise, wie die nächsten Daten gelesen werden, oder was sie repräsentieren, weiß er halt aus den vorhergehenden, z.B. aus dem kurz davor gesendeten <was kommt nun> oder aus anderem Kontext.
Damit du nicht mehr über fehlende Praxis plagen kannst:
Wie man einen komplexeren Block mit diversen Daten zusammenhängend senden kann (KANN):
Code: Alles auswählen
// Hier benutzte Membervariable:
// QTcpSocket *m_socket;
QByteArray block;
QDataStream out( &block, QIODevice::WriteOnly );
out << (quint32)0; // Die Größe des Blockes. Wird hier reserviert aber zum Schluss gesetzt.
// 'out' hier mit Informationsdaten beschreiben.
out.device()->seek( 0 );
out << (quint32)(block.size() - sizeof( quint32 ));
m_socket->write( block );
Code: Alles auswählen
// Hier benutzte Membervariablen:
// quint32 m_blockSize;
// QTcpSocket *m_socket;
QDataStream in( m_socket );
// Blockgröße lesen, falls noch nicht bekannt
if( m_blockSize == 0 )
{
if( m_socket->bytesAvailable() < (int)sizeof( quint32 ) )
return;
in >> m_blockSize;
}
// Warten, bis der komplette Block angekommen ist.
if( m_socket->bytesAvailable() < m_blockSize )
return;
// von 'in' hier die Informationsdaten lesen.