Я хотел бы отправлять / получать файлы изображений и 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, размер данных является переменным, и иногда конец файла не записывается в буфер перед началомчитать его.
Есть ли простое решение для этого?