Передаются не все данные в qt по сети

Написал без thread класс, который должен скачать файл. сначала класс отправляет json и получает ответ. в ответе содержиться size файла. после этого начинается передача данных. но передается почему то не весь файл, а сервер сигнализирует что успешно отправил все данные в сокет.

#include "updater.h"
#include "version.h"


Updater::Updater(QWidget *parent) : QObject(parent)
{
    sock = new QTcpSocket(nullptr);
    connect (sock, SIGNAL(connected()), this, SLOT(connectedSlot()));
    connect (sock, SIGNAL(readyRead()), this, SLOT(readyReadSlot()));
    sock->connectToHost("localhost", 2341, QIODevice::ReadWrite);
    first = false;
}

void Updater::connectedSlot()
{
    QJsonObject data;
    data["command"] = "update";
    data["os"] = "windows";
    data["version"] = PLAYER_VERSION;

    QJsonDocument doc(data);
    QByteArray byte_data = doc.toJson(QJsonDocument::Compact);

    sock->write(byte_data,byte_data.length());

}
void Updater::readyReadSlot()
{

    if ( first == false ) {
        char qdata[16384];
        int ret = sock->read(qdata, 16384);
        qdata[ret] = 0;
        qDebug() << "read data: " << qdata << "ret: " << ret;

        QJsonDocument jsonDoc = QJsonDocument::fromJson(qdata,nullptr);
        qDebug() << jsonDoc.toJson();
        QJsonObject object = jsonDoc.object();

        if(object["done"].toBool() == true) {
            return;
        }

        QString file_path = object["file"].toString();
        size = object.value("size").toVariant().toULongLong();

        file = new QFile(file_path);
        qDebug() << "file " << file_path << " size: " << size;

        file->open( QIODevice::WriteOnly | QIODevice::Truncate);
        first = true;
    } else {
        char qdata[16384];
        int ret = sock->read(qdata, 16384);
        if ( ret > 0 ) file->write(qdata, ret);
        size -= ret;
        if ( size == 0 ) {

            file->close();
            sock->close();
        }
    }
}



Ответы (0 шт):