Ich habe ein Gerät welches mir Images liefert (etwa 15kb große jpgs und das 30 mal pro Sekunde). Diese Bilder sollen dann von meiner Serverapplikation an diverse Clients gesendet werden. Der Client rendert diese in OpenGL auf eine Textur. Sofern ich nur jedes 10 Bild verschicke läuft alles einwandfrei. Verschicke ich nun jedes Bild, dann werden nach etwa 20 sekunden keine Bilder mehr übertragen (das empfangen QImage ist dann immer NULL).
Hier mein Codesnippet von der Serverseite:
Code: Alles auswählen
void VideoServer::slotSendMessage(const QImage& image)
{
QByteArray baImage;
QByteArray block;
QBuffer buffer(&baImage);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "JPG");
for (int i = 0; i < connectedSockets.count(); ++i)
{
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_4);
qDebug() << (quint16)baImage.size();
out << (quint16)baImage.size();
out << baImage;
connectedSockets[i]->write(block);
}
}
Code: Alles auswählen
connect(&socket, SIGNAL(readyRead()),
this, SLOT(slotReciveMessage()));
void VideoClient::slotReciveMessage()
{
QImage image;
int i = 0;
QDataStream stream(&socket);
stream.setVersion(QDataStream::Qt_4_4);
while (!stream.atEnd())
{
stream >> image;
i++;
}
qDebug()<< i;
emit signalRenderCamImage(image);
}
Auffällig ist, dass der Wert i immer 1 ist wenn ein QImage nicht Null ist (also ein Bild erfolgreich beim Client ankommt), und anderenfalls nen Wet von mehreren tausend hat, das also stream.atEnd() erst mehrere Tausendmal durchlaufen werden muss.
Auch wenn der Server schon längst gestoppt ist wird auf der Clientseite immer wieter ein readyRead emmitiert. Mit Wireshark kann ich leider nicht den Traffic von 127.0.0.1 beobachten, um evtl weitere Infos zu bekommen.
Hat jemadn ne Idee was ich da machen kann, oder ob mein Ansatz grundsätzlich falsch ist?
Bin für alle Ideen dankbar!
Grüße Rumbert