我想在客户端服务器程序中发送/接收图像文件和2个整数作为消息。如何通过QT中的套接字传输更大的对象?
我使用这个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数据大小是可变的,有时文件的末尾没有得到写入在我开始读取它之前的缓冲区。
有没有简单的解决方案呢?
你能不只是第一次发送图像的大小?例如,在由公共接口定义的报头结构中。你还可以包括其他有用的信息,如发件人标签,时间戳,名称等...... – Dennis 2011-05-09 17:06:38