QT实现局域网传输文件工程源代码

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

有不少读者希望我共享工程源代码,于是经过考虑我决定共享本项目的老版本源代码。

项目原因,本次只共享了老版本的源代码GStatuesVersion1.0和2.0,新版本代码暂时无法共享,如果遇到问题需要帮助可以联系我。

先看下效果:

老版本实现的功能为在局域网之间传输文件和发送命令,显示发送进度等。

老版本存在的问题仅仅为界面卡顿,无法连续传输文件等,功能本身无问题。

源代码跨平台,Windows和Linux下都可以正常工作,2.0只是增加了进度显示,整理了传输函数。

源代码1.0下载地址:https://autumoon.lanzoux.com/ikdQOix3qrc

源代码2.0下载地址:https://autumoon.lanzoux.com/ic7Chix48pi

任务接口:

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

#include <QObject>
#include <string>
#include <vector>
// Qt lib import
#include <QNetworkRequest>
#include <QNetworkReply>

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;}

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

    //发送命令到客户机
    void SendCommand(string strIp, string strCommand, string strParameter);

    //发送单个文件到客户机
    int SendData(string strMasterFullPath, string strIp, string strClientFullPath, int seconds = 0);
    //发送多个文件到客户机,任意文件如果传送失败会等待5秒后再尝试m_nTryTimes次
    int SendData(const vector<string>& vMasterFullPaths, string strIp, const vector<string>& vClientFullPaths, int seconds = 5);

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

signals:
    void progress(qint64, qint64);
    void finished(bool);

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

private slots:
    void CheckCommandResult(QNetworkReply *reply);
    void ReSendData(bool bLastSuccess);

private:
    int ParseReplyData(QNetworkReply* reply, QByteArray& data);
    void SetRequestHeader(QNetworkRequest &request)
    {
        request.setRawHeader("Content-Type", "charset='utf-8'");
        request.setRawHeader("Content-Type", "application/json");
    }
    void Sleep(int msec = 5000);

private:
    qint16 m_nCmdPort;
    qint16 m_nUploadPort;

    //传输多个文件,失败重传
    int m_nCurIndex;
    int m_nTryTimes;
    string m_strIp;
    vector<string> m_vMasterFullPaths;
    vector<string> m_vClientFullPaths;
};

#endif // TASKSINTERFACE_H

欢迎交流与讨论!

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值