标签:user data 连接 ada define received 写文件 switch obj
FZ软件分两个,服务器和客户端,已经写得非常的好的,完全可以满足工作需要,所以我只是对FTP原理做一下了解,具体编程不做太深的掌握。
Qt对于FTP和HTTP都使用同一个类来完成:QNetworkAccessManager
转:
FTPManager.h
#ifndef FTP_MANAGER
#define FTP_MANAGER
#include <QUrl>
#include <QFile>
#include <QNetworkReply>
#include <QNetworkAccessManager>
class FtpManager : public QObject
{
Q_OBJECT
public:
explicit FtpManager(QObject *parent = 0);
// 设置地址和端口
void setHostPort(const QString &host, int port = 21);
// 设置登录 FTP 服务器的用户名和密码
void setUserInfo(const QString &userName, const QString &password);
// 上传文件
void put(const QString &fileName, const QString &path);
// 下载文件
void get(const QString &path, const QString &fileName);
signals:
void error(QNetworkReply::NetworkError);
// 上传进度
void uploadProgress(qint64 bytesSent, qint64 bytesTotal);
// 下载进度
void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);
private slots:
// 下载过程中写文件
void finished();
private:
QUrl m_pUrl;
QFile m_file;
QNetworkAccessManager m_manager;
};
#endif // FTP_MANAGER
FTPManager.cpp
#include <QFileInfo>
#include "FTPManager.h"
FtpManager::FtpManager(QObject *parent)
: QObject(parent)
{
// 设置协议
m_pUrl.setScheme("ftp");
}
// 设置地址和端口
void FtpManager::setHostPort(const QString &host, int port)
{
m_pUrl.setHost(host);
m_pUrl.setPort(port);
}
// 设置登录 FTP 服务器的用户名和密码
void FtpManager::setUserInfo(const QString &userName, const QString &password)
{
m_pUrl.setUserName(userName);
m_pUrl.setPassword(password);
}
// 上传文件
void FtpManager::put(const QString &fileName, const QString &path)
{
QFile file(fileName);
file.open(QIODevice::ReadOnly);
QByteArray data = file.readAll();
m_pUrl.setPath(path);
QNetworkReply *pReply = m_manager.put(QNetworkRequest(m_pUrl), data);
connect(pReply, SIGNAL(uploadProgress(qint64, qint64)), this, SIGNAL(uploadProgress(qint64, qint64)));
connect(pReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SIGNAL(error(QNetworkReply::NetworkError)));
}
// 下载文件
void FtpManager::get(const QString &path, const QString &fileName)
{
QFileInfo info;
info.setFile(fileName);
m_file.setFileName(fileName);
m_file.open(QIODevice::WriteOnly | QIODevice::Append);
m_pUrl.setPath(path);
QNetworkReply *pReply = m_manager.get(QNetworkRequest(m_pUrl));
connect(pReply, SIGNAL(finished()), this, SLOT(finished()));
connect(pReply, SIGNAL(downloadProgress(qint64, qint64)), this, SIGNAL(downloadProgress(qint64, qint64)));
connect(pReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SIGNAL(error(QNetworkReply::NetworkError)));
}
// 下载过程中写文件
void FtpManager::finished()
{
QNetworkReply *pReply = qobject_cast<QNetworkReply *>(sender());
switch (pReply->error()) {
case QNetworkReply::NoError : {
m_file.write(pReply->readAll());
m_file.flush();
}
break;
default:
break;
}
m_file.close();
pReply->deleteLater();
}
下面对FZ软件配置做说明:
一、服务器
1、打开FZserver,Edit-》Users,选择General,add添加服务器名字,password打上勾设置密码
2、选择Shared folders,add添加服务器路径,选择D盘吧,右边的Files和Directoris是客户端对D盘的权限
3、再打开Edit-》Setting,有个Logging,Enable logging to file打上勾
二、客户端
打开FZclient,输入主机:ftp://192.168.1.100(服务器IP),输入用户名和密码,端口可不填(21是FTP,22是SFTP),快速连接就行了
标签:user data 连接 ada define received 写文件 switch obj
原文地址:http://www.cnblogs.com/judes/p/7098116.html