QTcpSocket readyread Signal wird nicht ausgegeben?
Verfasst: 16. September 2012 12:36
Hallo,
ich sitze vor einem Problem und komme einfach nicht weiter, vielleicht sehe ich auch den Wald vor lauter Bäumen nicht...
Das Problem ist, bei einer Netzwerkverbindung empfange ich die Größe des folgenden Blocks aber dann wird der Block nicht verarbeitet. Ich kommuniziere von dem Thread zum Mainthread per signal. Bevor Fragen aufkommen,der Code dient nur zur Probe, ob die Kommunikation generell funktioniert. Zur Probe sende ich zuerst 4 Bytes mit der Größe des Blockes und danach 8 Bytes zum testen. Wenn ich alles starte, wird die Blockgröße von 8 im Serverfenster angezeigt, nur dann passiert nichts mehr, er springt nicht in die Schleife in der der Thread gestartet wird und ich weis einfach nicht wieso!
mein readyread signal von dem Socket:
das Auslesen der Blockgröße:
der Thread im Threadpool:
und vollständigkeitshalber der Code zum senden des Bytearrays
ich sitze vor einem Problem und komme einfach nicht weiter, vielleicht sehe ich auch den Wald vor lauter Bäumen nicht...
Das Problem ist, bei einer Netzwerkverbindung empfange ich die Größe des folgenden Blocks aber dann wird der Block nicht verarbeitet. Ich kommuniziere von dem Thread zum Mainthread per signal. Bevor Fragen aufkommen,der Code dient nur zur Probe, ob die Kommunikation generell funktioniert. Zur Probe sende ich zuerst 4 Bytes mit der Größe des Blockes und danach 8 Bytes zum testen. Wenn ich alles starte, wird die Blockgröße von 8 im Serverfenster angezeigt, nur dann passiert nichts mehr, er springt nicht in die Schleife in der der Thread gestartet wird und ich weis einfach nicht wieso!
mein readyread signal von dem Socket:
Code: Alles auswählen
void MyClient::readyRead()
{
bytes = socket->bytesAvailable();
if(nextBlockSize == 0 && bytes >= 4)
{
readnextBlockSize();
qDebug() << nextBlockSize;
return;
}
if(nextBlockSize != 0 && bytes >= nextBlockSize)
{
qDebug() << "Thread start";
task_receivedata *receivedata = new task_receivedata(socket->read(nextBlockSize));
receivedata->setAutoDelete(true);
connect(receivedata,SIGNAL(send_data(QByteArray)),this,SLOT(send(QByteArray)),Qt::QueuedConnection);
QThreadPool::globalInstance()->start(receivedata);
nextBlockSize = 0;
return;
}
}
Code: Alles auswählen
void MyClient::readnextBlockSize()
{
QByteArray blocksize(socket->read(4));
union
{
char Blocksizein[4];
quint32 BlockSizeout;
} x;
char *p = x.Blocksizein;
*p++ = blocksize[0];
*p++ = blocksize[1];
*p++ = blocksize[2];
*p = blocksize[3];
nextBlockSize = x.BlockSizeout;
}
Code: Alles auswählen
void task_receivedata::run()
{
qDebug() << empfangen;
qDebug() << "empfangen";
senden = empfangen;
for(long i = 0;i<200;i++)
{
i = i + 1;
i = i - 1;
}
emit send_data(senden);
}
Code: Alles auswählen
void client::start()
{
socket->connectToHost("127.0.0.1",
1234);
test.resize(12);
test[0] = 0x08;
test[1] = 0x00;
test[2] = 0x00;
test[3] = 0x00;
test[4] = 0x01;
test[5] = 0x00;
test[6] = 0x00;
test[7] = 0x00;
test[8] = 0x01;
test[9] = 0x00;
test[10] = 0x00;
test[11] = 0x00;
socket->write(test);
}