Qt 自动升级程序(服务端)

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtNetwork/QTcpServer>
#include <QtNetwork/QTcpSocket>

#pragma comment(lib, "Qt5Networkd.lib")

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

public slots:
    void newConnect();
    void readClient();

private:
    Ui::MainWindow *ui;
    QTcpServer *qtcpServer;
    QTcpSocket *clientSocket;

    QString m_sVersion;

    QByteArray m_updateByteArray;
};

#endif // MAINWINDOW_H


mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFile>
#include <QMessageBox>

#define UPDATE_FILE_NAME ("ShutDownServer.exe")

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    qtcpServer = new QTcpServer(this);
    clientSocket = new QTcpSocket(this);

    // 监听是否有客户端连接
    qtcpServer->listen(QHostAddress::Any, 6666);
    connect(qtcpServer, SIGNAL(newConnection()), this, SLOT(newConnect()));

    // 读取version.dat中的版本号
    m_sVersion = "";
    QFile file("version.dat");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        qDebug() << "Can't open the file!" << endl;
    }
    QByteArray line = file.readLine();
    m_sVersion.append(line);

    // 读取要更新的程序
    QFile updateFile(UPDATE_FILE_NAME);
    if (updateFile.open(QIODevice::ReadOnly))
    {
        m_updateByteArray = updateFile.readAll();
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::newConnect()
{
    clientSocket = qtcpServer->nextPendingConnection();
    connect(clientSocket, SIGNAL(readyRead()), this, SLOT(readClient()));
}

// 收到用户请求
void MainWindow::readClient()
{
    quint64 ullWriteLen = 0u;
    QString str = clientSocket->readAll();
    std::string data = m_sVersion.toStdString();

    if ("read version" == str)
    {
        clientSocket->write(data.c_str());
    }
    else if ("update" == str)
    {
        ullWriteLen = clientSocket->write(m_updateByteArray);
        this->ui->textEdit->append("request from: " + clientSocket->peerAddress().toString());
        this->ui->textEdit->append("filesize:" + QString::number(m_updateByteArray.size()) + " bytes, socket write length:" + QString::number(ullWriteLen) + " bytes");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值