Передаются не все данные в 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();
}
}
}