【发布时间】:2014-02-05 01:05:27
【问题描述】:
我想在客户端服务器程序中发送/接收图像文件和 2 个整数作为消息。
我为此使用QLocalSocket 和QImage。
但是我不知道如何仅在图像和整数完全写入缓冲区后从套接字读取,因为readyRead 信号已经在前几个字节后触发。
这是我的部分代码:
// sending
QDataStream stream(socket);
stream << image << i << j;
// recieving
void MainWindow::readyRead() {
// ...
if (socket->bytesAvailable() > 400)
{
QByteArray b = socket->readAll();
QDataStream stream(&b, QIODevice::ReadOnly);
QImage image;
int i, j;
stream >> image >> i >> j;
// ...
}
}
我尝试猜测传入的文件大小,但由于 QImage 被序列化为 PNG,因此数据大小是可变的,有时文件末尾在我开始读取之前不会写入缓冲区。
有没有简单的解决方案?
【问题讨论】:
-
能不能先发图片的大小?例如,在由公共接口定义的标头结构中。您还可以包含其他有用的信息,例如发件人标签、时间戳、姓名等...