QT开发中文网

void upload_program::on_toolBtn_upload_clicked() { //获得文件名 int index = ui->edit_path->text().lastIndexOf("/"); QString filename = ui->edit_path->text().mid(index + 1); //读取文件 QFile file(ui->edit_path->

如果服务端没有回复任何信息,可以在客户端使用定时器或者计数器来检测数据是否发送完毕。具体实现方法如下:

  1. 使用定时器:在发送数据之前启动一个定时器,每隔一段时间检查socket的bytesToWrite()函数返回值是否为0。如果为0,则说明数据已经全部发送完毕。

代码示例:

// 启动定时器 QTimer *timer = new QTimer(this); connect(timer, &QTimer::timeout, this, ={

if(socket->bytesToWrite() == 0){
    qDebug() << "Data sent successfully";
    timer->stop();
}

}); timer->start(1000); // 每隔1秒检查一次

  1. 使用计数器:在循环中记录已经发送的小块数,并与总共需要发送的小块数进行比较。当两者相等时,说明数据已经全部发送完毕。

代码示例:

int numBlocksSent = 0; // 已经发送的小块数 for (int i = 0; i < numBlocks; ++i) {

QByteArray blockData;
int startPos = i * blockSize;
blockData.append(file_content.mid(startPos, qMin(blockSize, file_content.size() - startPos)));
data.append(blockData);

socket->write(data);
socket->flush();

// 清空data,准备发送下一个小块
data.clear();

numBlocksSent++;

}

data.append(char(0xDC));

// 发送最后一个小块和结束标志 socket->write(data); socket->flush();

// 检查是否发送完毕 if(numBlocksSent == numBlocks){

qDebug() << "Data sent successfully";

}

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=1976

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?