QT之网络编程-文件传输

昨天我们写了QT之TCP网络编程,今天就来看一下,在QT下的文件传输,这是在昨天所写代码的基础上添加上的。。

先看一下最终效果:
在这里插入图片描述
在这里插入图片描述
文件传输主要步骤:
服务器端:
1、打开服务器端的文件所在路径

 QString filePath = QFileDialog::getOpenFileName(this,"选择文件","../");

2、打开文件

 bool isOK = file.open(QIODevice::ReadOnly);

3、先发送文件头部信息

//先发送文件头信息 文件名##文件大小
QString head = QString("%1##%2").arg(fileName).arg(fileSize);
//发送头部信息
qint64 len = tcpSocket->write(head.toUtf8());

4、发送真是的文件数据

//往文件里读数据
len = file.read(buf,sizeof(buf));
//发送数据,读多少,发多少
len = tcpSocket->write(buf,len);

客户端:
1、建立连接后收到服务器文件数据的信号槽

connect(tcpSocket,&QTcpSocket::readyRead,[=](){
   });

2、解析头部信息

 //解析头部信息,初始化
fileName = QString(buf).section("##",0,0);
fileSize = QString(buf).section("##",1,1).toInt();

3、打开文件

 bool isOK = file.open(QIODevice::WriteOnly|QIODevice::Append);

4、读取文件信息

quint64 len = file.write(buf);

这里还是贴一下源码吧,虽然可以实现传输文件功能,由于在网络编程基础上修改的,里边还存在一些bug,有兴趣的同学可以修改一下,使其完美一些.

不要忘记在.pro文件中添加 QT += core gui network

serverwidget.h

#ifndef SERVERWIDGET_H
#define SERVERWIDGET_H

#include <QWidget>
#include<QTcpServer>//监听套接字
#include<QTcpSocket>//通信套接字
#include<QFile>
#include<QTimer>

QT_BEGIN_NAMESPACE
namespace Ui {
    class ServerWidget; }
QT_END_NAMESPACE

class ServerWidget : public QWidget
{
   
    Q_OBJECT

public:
    ServerWidget(QWidget *parent = nullptr);
    ~ServerWidget();

    void sendData();//发送数据

private slots:
    void on_ButtonSend_clicked();
    void on_ButtonClose_clicked();

    void on_ButtonFile_clicked();
    void on_ButtonFileSend_clicked();

private:
    Ui::ServerWidget *ui;
    QTcpServer *tcpServer;//监听套接字
    QTcpSocket *tcpSocket;//通信套接字

    QFile file;//文件对象
    QString fileName;//文件名称
    quint64 fileSize;//文件大小
    quint64 sendSize;//已经发送文件大小
    QTimer timer;
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值