首页 > 编程知识 正文

qt网络传输文件,qt局域网通信

时间:2023-05-05 12:27:07 阅读:269852 作者:3977

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

项目原因,本次只共享了老版本的源代码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_OBJECTpublic: 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

欢迎交流与讨论!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。