实现主要功能:
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
新版本主要为美化,顺便实现了分机进度显示。
源代码由于项目问题暂时无法公开,需要帮助可以与我取得联系。