优化tcp通信

This commit is contained in:
zhangsheng 2025-03-01 19:22:48 +08:00
parent 5018130ea1
commit aa85119143

View File

@ -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<char*>(&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();