programación de la red usando Qt 3 ftp1 QNetworkAccessManager

        FTP (File Transfer Protocol, protocolo de transferencia de archivos) es un protocolo que se utiliza principalmente para navegar por los directorios remotos y transferir archivos. FTP dos conexiones de red, para enviar un comando a una salida de datos. protocolo FTP tiene un estado, y el cliente tiene que enviar algún comando antes de transferir archivos. cliente FTP establece una conexión, y permanece abierto durante toda la sesión. Durante cada sesión, se puede producir una pluralidad de transmisión.

        Al escribir en la aplicación QT5 FTP, es necesario utilizar QNetworkAccessManager y otra clase de interfaz de acceso a la red. Implementación de la aplicación HTTP anterior mencionado es muy similar, acaba de establecer una buena acogida direcciones, nombres de usuario y contraseñas en qurl objeto, y luego usar el get (), funciones put (), tales como el acceso a archivos y de carga para completar.

myftp.pro, módulo de red adicional

QT       += network

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QUrl>
class QNetworkReply;
class QNetworkAccessManager;
class QFile;

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

    void startRequest(QUrl url);
private:
    Ui::MainWindow *ui;
    QNetworkAccessManager *manager;
    QNetworkReply *reply;
    QUrl url;
    QFile *file;

private slots:
    void httpFinished();
    void httpReadyRead();
    void updateDataReadProgress(qint64,qint64);
    void on_pushButton_clicked();
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QNetworkAccessManager>
#include <QtNetwork>
#include <QFile>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    manager = new QNetworkAccessManager(this);
    ui->progressBar->hide();
}

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

void MainWindow::startRequest(QUrl url,bool bSend)
{
    if (!bSend) {
        reply = manager->get(QNetworkRequest(url));
        connect(reply,&QNetworkReply::readyRead,this,&MainWindow::httpReadyRead);
        connect(reply,&QNetworkReply::downloadProgress,this,&MainWindow::updateDataReadProgress);
        connect(reply,&QNetworkReply::finished,this,&MainWindow::httpFinished);
    } else {
        QString fileName = "e:/XunLei.exe";
        QFile file(fileName);
        QByteArray by_txt;
        if (file.open(QIODevice::ReadOnly))
        {
            by_txt = file.readAll();
            file.close();
            reply = manager->put(QNetworkRequest(url),by_txt);
        }
        connect(reply,&QNetworkReply::finished,this,&MainWindow::httpFinished);
    }

}

void MainWindow::httpFinished()
{
    ui->progressBar->hide();
    if (file) {
        file->close();
        delete file;
        file = 0;
    }
    reply->deleteLater();
    reply = 0;
    qDebug()<<"send complete";
}

void MainWindow::httpReadyRead()
{
    if (file) {
        file->write(reply->readAll());
    }
}

void MainWindow::updateDataReadProgress(qint64 bytesRead,qint64 totalBytes)
{
    ui->progressBar->setMaximum(totalBytes);
    ui->progressBar->setValue(bytesRead);
}




void MainWindow::on_pushButton_clicked()
{
    //url = ui->lineEdit->text();
    QUrl url;
    url.setScheme("ftp");
    url.setHost("192.168.1.9");
    url.setPath("qt-opensource-windows-x86-msvc2015_64-5.7.1.exe");
    url.setUserName("adminFtp");
    url.setPassword("123456");

    QFileInfo info(url.path());
    QString fileName(info.fileName());
    if (fileName.isEmpty()) {
        fileName = "index.html";
    }
    file = new QFile(fileName);
    if (!file->open(QIODevice::WriteOnly)) {
        delete file;
        file = 0;
        return;
    }
    startRequest(url,false);
    ui->progressBar->setValue(0);
    ui->progressBar->show();
}

void MainWindow::on_pushButton_2_clicked()
{
    QUrl url;
    url.setScheme("ftp");
    url.setHost("192.168.1.9");
    url.setPath("XunLei.exe");// 目标文件名
    url.setUserName("adminFtp");
    url.setPassword("123456");

    startRequest(url,true);
    ui->progressBar->setValue(0);
    ui->progressBar->show();
}

El resultado:

 

Publicados 257 artículos originales · ganado elogios 22 · Vistas a 90000 +

Supongo que te gusta

Origin blog.csdn.net/qq_24127015/article/details/104669995
Recomendado
Clasificación