基于QT的局域网文件传输系统

62 篇文章 8 订阅
21 篇文章 0 订阅

实现主要功能:

1.扫描局域网客户端

2.连续传输文件与目录

3.传输结束自动执行程序

4.显示进度与状态

老版本源代码:https://blog.csdn.net/autumoonchina/article/details/110392800

新版本界面:

新版本接口文件:

//author:autumoon
//联系QQ:4589968
//日期:2020-12-29
#ifndef TASKSINTERFACE_H
#define TASKSINTERFACE_H

#include <QObject>
#include <string>
#include <vector>

// Qt lib import
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QMutex>

using namespace std;

typedef struct _ClinetInfo
{
    string strIp;
    string strDemPath;
    string strDomPath;
    string strSrcPath;
    string strRootPath;
    string strProgramPath;
    string strProgressTxtPath;
}ClientInfo;

class TasksInterface : public QObject
{
    Q_OBJECT
public:
    explicit TasksInterface(QObject *parent = nullptr);

    //初始化命令端口和上传端口
    void Initialize(const qint16& nCmdPort = 9998, const qint16& nUploadPort = 9999)
    {m_nCmdPort = nCmdPort; m_nUploadPort = nUploadPort;}

    //发送命令到客户机
    void SendCommand(string strIp, string strCommand, string strParameter);
    void SendDownloadList(string strIp, vector<string>& vSrcFiles, vector<string>& vDstFiles);

    //发送单个文件到客户机
    int SendData(string strMasterFullPath, string strIp, string strClientFullPath);
    //发送多个文件到客户机
    int SendData(const vector<string>& vMasterFullPaths, string strIp, const vector<string>& vClientFullPaths);

    //发送任务
    int SendTasks(const std::vector<ClientInfo>& vClinets, string strPath, int nMethod);

    //判断目标机器是否存在指定的进程 -1不存在 0未知 1存在
    static int CheckClientProcess(string strHost, string strProcessName, bool bKillIfExists = false);
    //查询目标机器的处理进度,返回进度值0-100
    static int CheckClientProgress(string strHost, string strProgressFilePathName, string& strInfo);
    //初始化目标机器的进度文件
    static int InitializeClientProgress(string strHost, string strProgressFilePathName);

signals:
    void progress(qint64, qint64);
    void finished(bool, const QString&);

    //传输单个文件对应的信号
    void progress_file(qint64, qint64);
    void finished_file(bool, const QString&);

    //某个主机的传输进度
    void host_progress(qint64, qint64, const QString&);

private slots:
    void checkCommandResult(QNetworkReply *reply);
    void sendDownloadListOver();
    int runCmdAfterFinished(bool bSuccess, const QString& strHost);

private:
    //发送任务,TCP直接传输
    int SendTasks(const std::vector<ClientInfo>& vClinets);
    //发送单个目录,保持目录结构,TCP直接传输
    int SendLocalDir(const std::vector<ClientInfo>& vClinets, string strLocalPath);

    //本机作为服务器的方式发送任务,strRootDir为服务器根目录
    int SendTasks(const std::vector<ClientInfo>& vClinets, string strRootDir);

    static int parseReplyData(QNetworkReply* reply, QByteArray& data);
    static void setRequestHeader(QNetworkRequest &request)
    {
        request.setRawHeader("Content-Type", "charset='utf-8'");
        request.setRawHeader("Content-Type", "application/json");
    }

    //获取本机IP地址
    QHostAddress getLocalHostIP();
    string localPath2WebUrl(const string& strLocalPath, const string& strLocalRootDir);

    void sleep(int msec = 5000);

private:
    quint16 m_nCmdPort;
    quint16 m_nUploadPort;

    //传输多个文件,失败重传
    bool m_bSuccess;
    int m_nProgress;
    QMutex m_mProgress;
    vector<ClientInfo> m_vClinets;
};

#endif // TASKSINTERFACE_H

新版本主要为美化,顺便实现了分机进度显示。

源代码由于项目问题暂时无法公开,需要帮助可以与我取得联系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值