nach meinem Post: "Zuviel Daten für QTcpSocket?" bin ich nun total verwirrt und wollte einmal grundsätzlich Nachfragen, was nun richtig ist, um Daten über einen TCPSocket zu schicken. Mit Hilfe des Forums, des Internets und Literatur bin ich auf zahlreiche Lösungsansätze gestoßen, von denen ich nun nicht weiß, welche überhaupt nicht gehen können und welche wo ihre Vor- und Nachteile haben. Hier nun meine fünf Varianten zum übertragen der Bildgröße und des QImages.
Code: Alles auswählen
// ### 1 ###
void VideoServer::slotSendMessage(const QImage& image)
{
QByteArray baImage;
QBuffer buffer(&baImage);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "JPG");
QDataStream directOut(connectedSockets[1]);
// Übertragen der Bildgröße
directOut << (quint16)baImage.size();
// übertragen des Bildes
connectedSockets[1]->write(baImage);
}
// ### 2 ###
void VideoServer::slotSendMessage(const QImage& image)
{
QByteArray baImage;
QBuffer buffer(&baImage);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "JPG");
QDataStream directOut(connectedSockets[1]);
// Übertragen der Bildgröße
directOut << (quint16)baImage.size();
// übertragen des Bildes
directOut << baImage;
}
// ### 3 ###
void VideoServer::slotSendMessage(const QImage& image)
{
QByteArray baImage;
QByteArray block;
QBuffer buffer(&baImage);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "JPG");
QDataStream directOut(connectedSockets[1]);
// Übertragen der Bildgröße
directOut << (quint16)baImage.size();
// übertragen des Bildes
QDataStream out(&block, QIODevice::WriteOnly);
out << baImage;
}
// ### 4 ###
void VideoServer::slotSendMessage(const QImage& image)
{
QByteArray baImage;
QByteArray block;
QBuffer buffer(&baImage);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "JPG");
QDataStream out(&block, QIODevice::WriteOnly);
// Übertragen der Bildgröße
out << (quint16)baImage.size();
// übertragen des Bildes
out << baImage;
connectedSockets[1]->write(block);
}
// ### 5 ###
void VideoServer::slotSendMessage(const QImage& image)
{
QByteArray baImage;
QByteArray block;
QBuffer buffer(&baImage);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "JPG");
QDataStream directOut(connectedSockets[1]);
// Übertragen der Bildgröße
directOut << (quint16)baImage.size();
// übertragen des Bildes
QDataStream out(&block, QIODevice::WriteOnly);
out << baImage;
connectedSockets[1]->write(block);
}
Alternativ Beispiele sind auch sehr Willkommen
Grüße Rumbert