Problem mit TcpSocket
Verfasst: 2. März 2009 15:20
Hallo, ich habe anhand eines Beispiels aus dem Buch Foundations of QT eine Anwendung geschrieben mit der ich Bilder über das Netzwerk übertragen kann.
Hier mal der Teil des Beispiels den ich nicht so richtig durchschaue:
void ClientDialog::tcpReady()
{
if( dataSize == 0 )
{
QDataStream stream( &socket );
stream.setVersion( QDataStream::Qt_4_0 );
if( socket.bytesAvailable() < sizeof(quint32) )
return;
stream >> dataSize;
}
if( dataSize > socket.bytesAvailable() )
return;
QByteArray array = socket.read( dataSize );
QBuffer buffer(&array);
buffer.open( QIODevice::ReadOnly );
Wenn ich den Programmcode debuggeg gibt es Szenarien in denen an der Stelle if( dataSize > socket.bytesAvailable() ) return; die Bedingung erfüllt ist und aus der Funktion gesprungen wird. Ich komme dann in die moc-Klasse und danach geht es nicht weiter.
Der Autor schreibt das es dafür da ist das gewartet wird bis das Bild vollständig übertragen wurde.
Kann mir jemand sagen was es damit auf sich hat, beziehungsweise erklären was da passiert. Das Debugging hilft nicht wirklich weiter.
Hier mal der Teil des Beispiels den ich nicht so richtig durchschaue:
void ClientDialog::tcpReady()
{
if( dataSize == 0 )
{
QDataStream stream( &socket );
stream.setVersion( QDataStream::Qt_4_0 );
if( socket.bytesAvailable() < sizeof(quint32) )
return;
stream >> dataSize;
}
if( dataSize > socket.bytesAvailable() )
return;
QByteArray array = socket.read( dataSize );
QBuffer buffer(&array);
buffer.open( QIODevice::ReadOnly );
Wenn ich den Programmcode debuggeg gibt es Szenarien in denen an der Stelle if( dataSize > socket.bytesAvailable() ) return; die Bedingung erfüllt ist und aus der Funktion gesprungen wird. Ich komme dann in die moc-Klasse und danach geht es nicht weiter.
Der Autor schreibt das es dafür da ist das gewartet wird bis das Bild vollständig übertragen wurde.
Kann mir jemand sagen was es damit auf sich hat, beziehungsweise erklären was da passiert. Das Debugging hilft nicht wirklich weiter.