有不少读者希望我共享工程源代码,于是经过考虑我决定共享本项目的老版本源代码。
项目原因,本次只共享了老版本的源代码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
欢迎交流与讨论!