qt tcp 远程升级程序

  • h4_704533
    了解作者
  • 3.1MB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-06-13 21:01
    上传日期
qt编写的tcp远程升级服务器和客户端程序。注释很全!
qt tcp.rar
  • tcpSender
  • tcpSender.suo
    10.5KB
  • tcpSender.vcproj.xieqingping-PC.xieqingping.user
    1.4KB
  • widget.ui
    2.6KB
  • tcpSender.sln
    883B
  • widget.cpp
    3.8KB
  • tcpSender.pro.user
    22.7KB
  • tcpSender.vcproj
    10.9KB
  • release
  • tcpSender.exe
    34.5KB
  • debug
  • tcpSender.ilk
    926.2KB
  • tcpSender.exe
    66KB
  • tcpSender.pdb
    1.6MB
  • GeneratedFiles
  • Release
  • moc_widget.cpp
    3.4KB
  • Debug
  • moc_widget.cpp
    3.4KB
  • ui_widget.h
    3.7KB
  • tcpSender.pro
    338B
  • tcpSender.ncb
    6.7MB
  • Win32
  • Release
  • vc90.idb
    1.2MB
  • mt.dep
    60B
  • tcpSender.exe.intermediate.manifest
    873B
  • moc_widget.obj
    10.6KB
  • widget.obj
    64.1KB
  • BuildLog.htm
    10.8KB
  • main.obj
    8.4KB
  • Debug
  • vc90.idb
    1.2MB
  • vc90.pdb
    1.1MB
  • mt.dep
    60B
  • tcpSender.exe.intermediate.manifest
    878B
  • moc_widget.obj
    81.4KB
  • widget.obj
    165.1KB
  • BuildLog.htm
    10.6KB
  • main.obj
    76.8KB
  • main.cpp
    266B
  • widget.h
    982B
  • tcpReceiver
  • widget.ui
    1.3KB
  • tcpReceiver.vcproj.xieqingping-PC.xieqingping.user
    1.4KB
  • tcpReceiver.sln
    887B
  • widget.cpp
    3.3KB
  • release
  • tcpReceiver.exe
    28KB
  • debug
  • tcpReceiver.ilk
    803.2KB
  • tcpReceiver.pdb
    1.5MB
  • tcpReceiver.exe
    58KB
  • tcpReceiver.suo
    11KB
  • GeneratedFiles
  • Release
  • moc_widget.cpp
    3.2KB
  • Debug
  • moc_widget.cpp
    3.2KB
  • ui_widget.h
    2.3KB
  • tcpReceiver.pro.user
    22.7KB
  • tcpReceiver.ncb
    67KB
  • tcpReceiver.pro
    340B
  • Win32
  • Release
  • vc90.idb
    1.1MB
  • tcpReceiver.exe.intermediate.manifest
    873B
  • mt.dep
    60B
  • moc_widget.obj
    10.4KB
  • widget.obj
    50.1KB
  • BuildLog.htm
    7.8KB
  • main.obj
    8.4KB
  • Debug
  • vc90.idb
    1.1MB
  • vc90.pdb
    1.1MB
  • tcpReceiver.exe.intermediate.manifest
    878B
  • mt.dep
    60B
  • moc_widget.obj
    81.1KB
  • widget.obj
    142.7KB
  • BuildLog.htm
    10.7KB
  • main.obj
    76.8KB
  • main.cpp
    264B
  • tcpReceiver.vcproj
    10.9KB
  • widget.h
    861B
内容介绍
#include "widget.h" #include "ui_widget.h" #include <QFileDialog> Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); loadSize = 4*1024; totalBytes = 0; bytesWritten = 0; bytesToWrite = 0; tcpClient = new QTcpSocket(this); //当连接服务器成功时,发出connected()信号,我们开始传送文件 connect(tcpClient,SIGNAL(connected()),this,SLOT(startTransfer())); //当有数据发送成功时,我们更新进度条 connect(tcpClient,SIGNAL(bytesWritten(qint64)),this, SLOT(updateClientProgress(qint64))); connect(tcpClient,SIGNAL(error(QAbstractSocket::SocketError)),this, SLOT(displayError(QAbstractSocket::SocketError))); //开始使”发送“按钮不可用 ui->sendButton->setEnabled(false); } Widget::~Widget() { delete ui; } void Widget::openFile() //打开文件 { fileName = QFileDialog::getOpenFileName(this); if(!fileName.isEmpty()) { ui->sendButton->setEnabled(true); ui->clientStatusLabel->setText(tr("打开文件 %1 成功!") .arg(fileName)); } } void Widget::send() //连接到服务器,执行发送 { ui->sendButton->setEnabled(false); bytesWritten = 0; //初始化已发送字节为0 ui->clientStatusLabel->setText(tr("连接中…")); tcpClient->connectToHost(ui->hostLineEdit->text(), ui->portLineEdit->text().toInt());//连接 } void Widget::startTransfer() //实现文件大小等信息的发送 { localFile = new QFile(fileName); if(!localFile->open(QFile::ReadOnly)) { qDebug() << "open file error!"; return; } totalBytes = localFile->size(); //文件总大小 QDataStream sendOut(&outBlock,QIODevice::WriteOnly); sendOut.setVersion(QDataStream::Qt_4_6); QString currentFileName = fileName.right(fileName.size() - fileName.lastIndexOf('/')-1); sendOut << qint64(0) << qint64(0) << currentFileName; //依次写入总大小信息空间,文件名大小信息空间,文件名 totalBytes += outBlock.size(); //这里的总大小是文件名大小等信息和实际文件大小的总和 sendOut.device()->seek(0); sendOut<<totalBytes<<qint64((outBlock.size() - sizeof(qint64)*2)); //返回outBolock的开始,用实际的大小信息代替两个qint64(0)空间 bytesToWrite = totalBytes - tcpClient->write(outBlock); //发送完头数据后剩余数据的大小 ui->clientStatusLabel->setText(tr("已连接")); outBlock.resize(0); } void Widget::updateClientProgress(qint64 numBytes) //更新进度条,实现文件的传送 { bytesWritten += (int)numBytes; //已经发送数据的大小 if(bytesToWrite > 0) //如果已经发送了数据 { outBlock = localFile->read(qMin(bytesToWrite,loadSize)); //每次发送loadSize大小的数据,这里设置为4KB,如果剩余的数据不足4KB, //就发送剩余数据的大小 bytesToWrite -= (int)tcpClient->write(outBlock); //发送完一次数据后还剩余数据的大小 outBlock.resize(0); //清空发送缓冲区 } else { localFile->close(); //如果没有发送任何数据,则关闭文件 } ui->clientProgressBar->setMaximum(totalBytes); ui->clientProgressBar->setValue(bytesWritten); //更新进度条 if(bytesWritten == totalBytes) //发送完毕 { ui->clientStatusLabel->setText(tr("传送文件 %1 成功").arg(fileName)); localFile->close(); tcpClient->close(); } } void Widget::displayError(QAbstractSocket::SocketError) //显示错误 { qDebug() << tcpClient->errorString(); tcpClient->close(); ui->clientProgressBar->reset(); ui->clientStatusLabel->setText(tr("客户端就绪")); ui->sendButton->setEnabled(true); } void Widget::on_openButton_clicked() { openFile(); } void Widget::on_sendButton_clicked() { send(); }
评论