diff --git a/mainwindow.cpp b/mainwindow.cpp index d530cf9..4fa938d 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -495,13 +495,13 @@ void MainWindow::sendUpgradePackage(int slot) UpgradeCardReq upgrade_car_req; uint8_t card_id; if(slot == 0) - card_id = 0xFF; + upgrade_car_req.card_id = 0xFF; else - card_id = slot & 0xFF; + upgrade_car_req.card_id = slot & 0xFF; header.crc = calculate_crc(upgrade_car_req.card_id,fileData); header.len = fileSize; - qDebug() << "filheader.crc" << header.crc; + qDebug() << "filheader.crc" << header.crc << "card_id" << upgrade_car_req.card_id << endl; // 发送头部数据 //QByteArray packet(reinterpret_cast(&header), sizeof(PackageHead)); @@ -520,25 +520,49 @@ void MainWindow::sendUpgradePackage(int slot) send_buf = (char *)malloc(sizeof(PackageHead) + sizeof(UpgradeCardReq) + fileData.size() + 1); memset(send_buf,0,sizeof(PackageHead) + sizeof(UpgradeCardReq) + fileData.size() + 1); memcpy(send_buf, &header, sizeof(PackageHead)); - memcpy(send_buf + sizeof(PackageHead), &card_id, 1); - memcpy(send_buf + sizeof(PackageHead) + 1, fileData.data(), fileData.size()); - socket.write(send_buf); - socket.waitForBytesWritten(); + memcpy(send_buf + sizeof(PackageHead), &upgrade_car_req, sizeof(UpgradeCardReq)); + memcpy(send_buf + sizeof(PackageHead) + sizeof(UpgradeCardReq), fileData.data(), fileData.size()); + + int length = sizeof(PackageHead) + sizeof(UpgradeCardReq) + fileData.size(); + + const int MAX_CHUNK_SIZE = 50 * 1024; // 64 KB + qint64 bytesSent = 0; + qint64 totalBytes = length; + qDebug() << "totalBytes" << totalBytes << endl; + + while (bytesSent < totalBytes) { + qint64 chunkSize = 0; + if(MAX_CHUNK_SIZE < totalBytes - bytesSent){ + chunkSize = MAX_CHUNK_SIZE; + }else{ + chunkSize = totalBytes - bytesSent; + } + qint64 bytesWritten = socket.write(send_buf + bytesSent, chunkSize); + socket.waitForBytesWritten(); + qDebug() << "bytesWritten" << bytesWritten << "bytesSent" << bytesSent << endl; + if (bytesWritten == -1) { + // Handle error + break; + } + + bytesSent += bytesWritten; + } + // 发送头部 // qDebug() << "File sent successfully"; // // 等待服务器响应(根据需要处理响应) - // if (socket.waitForReadyRead()) { - // QByteArray response = socket.readAll(); - // UpgradeRsp resp; - // QByteArray byteArray = response.mid(sizeof(PackageHead)); - // QDataStream stream(&byteArray, QIODevice::ReadOnly); - // stream >> resp.code ; - // if(resp.code == 1){ - // QMessageBox::information(this, QStringLiteral("提示"), "上传成功!"); - // } - // qDebug() << "Server response: " << resp.code; - // } + if (socket.waitForReadyRead()) { + QByteArray response = socket.readAll(); + UpgradeRsp resp; + QByteArray byteArray = response.mid(sizeof(PackageHead)); + QDataStream stream(&byteArray, QIODevice::ReadOnly); + stream >> resp.code ; + if(resp.code == 1){ + QMessageBox::information(this, QStringLiteral("提示"), "上传成功!"); + } + qDebug() << "Server response: " << resp.code; + } // 关闭文件和连接 file.close(); socket.disconnectFromHost();