c++ - QPixmap over QUdpSocket - 无法读取正确的数据

标签 c++ qt sockets

我正在使用 Qt5,我正在尝试通过 QUdpProtocol 在 QDataStream 中使用 QByteArray 数据包发送 QPixmap。发送像素图很简单(并且正确?):

QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);

out.setVersion(QDataStream::Qt_5_0);
out << (quint32)0;
out << pixmap;
out.device()->seek(0);
out << (quint32)(block.size() - sizeof(quint32));

socket->write(block);
qDebug() << "Block size:" << (float)(block.size()/1024.f) << "KB";

但是阅读...没有任何 react -我的意思是,没有填写 QLabel,没有任何更改,任何错误消息。
QByteArray buffer;
buffer.resize(sock->pendingDatagramSize());
sock->readDatagram(buffer.data(), buffer.size(), &remoteAddr, &remotePort);

if (sock->bytesAvailable() > 0)
    return;

QDataStream out(&buffer, QIODevice::ReadOnly);
out.setVersion(QDataStream::Qt_5_0);

QPixmap p;
//out.device()->seek(0);
out >> p;
ui->label->setPixmap(p);

我知道 UDP 中的数据包碎片,但我尝试发送 50 个像素,20、10、5,最后 - 1。什么都没有。 两个程序显示相同的字节数(发送和接收)。如果这很重要,我将两个套接字绑定(bind)在 QHostAddress::LocalHost使用相同的端口,但原始文本已成功发送。

我做错了什么?

最佳答案

嗯,成功了。
来自互联网的代码是无效 .我试过这样:

QByteArray frame;

QDataStream out(&frame, QIODevice::WriteOnly);
out << myPixmap;

QDataStream in(&frame, QIODevice::ReadOnly);
QPixmap pix2;
in >> pix2;
ui->label->setPixmap(pix2);

它有效,而且很容易。

在开始的 Qt5 字节上,不需要大小。此外,通过 TCP/UDP 传输也可以正常工作(如果遇到问题,请记住最大数据包大小)。

关于c++ - QPixmap over QUdpSocket - 无法读取正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25672307/

相关文章:

c++ - 在 C++ 中定义加法运算符的正确方法

c++ - 通过套接字 C++ 发送时位域值发生变化

c++ - forward_list 迭代器稳定吗?

c++ - 如何在 C++11 中创建我自己的 initializer_list 类?

qt - 在我的 QT 安装中找不到Configure.exe

QtQuick 模板弹出窗口与 QtQuick Controls 弹出窗口

c++ - QT QNetworkAccessManager 和信号

java - 如何用Java实现 "Round Robin"负载均衡Web服务器

bash - 使用FIFO和日志文件桥接Unix域套接字

c++ - 链表 const 迭代器