成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解析 Qt 網絡之FTP 網絡學習基礎

移動開發
Qt 網絡之FTP 網絡學習基礎是本文要介紹的內容,FTP即文件傳輸協議。在本文中有詳細的介紹。先來看內容。

Qt 網絡FTP 網絡學習基礎是本文要介紹的內容,先來可能內容。FTP即File Transfer Protocol,也就是文件傳輸協議。FTP的主要作用,就是讓用戶連接上一個遠程計算機,查看遠程計算機有哪些文件,然后把文件從遠程計算機上拷貝到本地計算機,或者把本地計算機的文件送到遠程計算機上。

Qt中,我們可以使用上一節講述的QNetworkAccessManager和QNetworkReply類來進行FTP 程序的編寫,因為它們用起來很簡單。但是,對于較復雜的FTP操作,Qt還提供了QFtp類,利用這個類,我們很容易寫出一個FTP客戶端程序。下面我們先在幫助中查看這個類。

Qt 網絡之FTP 網絡學習基礎

在QFtp中,所有的操作都對應一個特定的函數,我們可以稱它們為命令。如connectToHost()連接到服務器命令,login()登錄命令,get()下載命令,mkdir()新建目錄命令等。因為QFtp類以異步方式工作,所以所有的這些函數都不是阻塞函數。也就是說,如果一個操作不能立即執行,那么這個函數就會直接返回,直到程序控制權返回Qt事件循環后才真正執行,它們不會影響界面的顯示。

所有的命令都返回一個int 型的編號,使用這個編號讓我們可以跟蹤這個命令,查看其執行狀態。當每條命令開始執行時,都會發出commandStarted()信號,當該命令執行結束時,會發出commandFinished()信號。我們可以利用這兩個信號和命令的編號來獲取命令的執行狀態。當然,我們不想執行每條命令都要記下它的編號,所以我們也可以使用currentCommand()來獲取現在執行的命令,其返回值與命令的對應關系如下圖。

Qt 網絡之FTP 網絡學習基礎

下面我們先看一個簡單的FTP客戶端的例子,然后對它進行擴展。

在這個例子中我們從FTP服務器上下載一個文件并顯示出來。

1、我們新建Qt4 Gui QApplication 。

工程名為“myFtp”,然后選中QtNetwork模塊,最后Base class選擇QWidget 。

2、修改widget.ui文件。

在其中添加一個Text Browser 和一個 Label,效果如下。

Qt 網絡之FTP 網絡學習基礎

3、在main.cpp中進行修改。

為了在程序中可以使用中文,我們在main.cpp中添加頭文件#include <QTextCodec>

并在main()函數中添加代碼:QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

#p#

4、在widget.h中進行修改。

先添加頭文件:#include <QFtp>

再在private中定義對象:QFtp *ftp;

添加私有槽函數:

  1. private slots:  
  2.     void ftpCommandStarted(int);  
  3. void ftpCommandFinished(int,bool); 

5、在widget.cpp中進行更改。

(1)在構造函數中添加代碼:

  1. ftp = new QFtp(this);  
  2.     ftp->connectToHost(“ftp.qt.nokia.com”); //連接到服務器  
  3.     ftp->login();   //登錄  
  4.     ftp->cd(“qt”);   //跳轉到“qt”目錄下  
  5.     ftp->get(“INSTALL”);  //下載“INSTALL”文件  
  6.     ftp->close();   //關閉連接  
  7.     connect(ftp,SIGNAL(commandStarted(int)),  
  8.             this,SLOT(ftpCommandStarted(int)));  
  9.     //當每條命令開始執行時發出相應的信號  
  10.     connect(ftp,SIGNAL(commandFinished(int,bool)),  
  11.             this,SLOT(ftpCommandFinished(int,bool)));  
  12. //當每條命令執行結束時發出相應的信號 

我們在構造函數里執行了幾個FTP的操作,登錄站點,并下載了一個文件。然后我們又關聯了兩個信號和槽,用來跟蹤命令的執行情況。

(2)實現槽函數:

  1. void Widget::ftpCommandStarted(int)  
  2. {  
  3.     if(ftp->currentCommand() == QFtp::ConnectToHost){  
  4.         ui->label->setText(tr(“正在連接到服務器…”));  
  5.     }  
  6.     if (ftp->currentCommand() == QFtp::Login){  
  7.         ui->label->setText(tr(“正在登錄…”));  
  8.     }  
  9.     if (ftp->currentCommand() == QFtp::Get){  
  10.         ui->label->setText(tr(“正在下載…”));  
  11.     }  
  12.     else if (ftp->currentCommand() == QFtp::Close){  
  13.         ui->label->setText(tr(“正在關閉連接…”));  
  14.     }  

每當命令執行時,都會執行ftpCommandStarted()函數,它有一個參數int id,這個id就是調用命令時返回的id,如int loginID = ftp->login(); 這時,我們就可以用if(id == loginID)來判斷執行的是否是login()函數。但是,我們不想為每個命令都設置一個變量來存儲其返回值,所以,我們這里使用了ftp->currentCommand() ,它也能獲取當前執行的命令的類型。在這個函數里我們讓開始不同的命令時顯示不同的狀態信息。

  1. void Widget::ftpCommandFinished(int,bool error)  
  2. {  
  3.     if(ftp->currentCommand() == QFtp::ConnectToHost){  
  4.         if(error) ui->label->setText(tr(“連接服務器出現錯誤:%1″).arg(ftp->errorString()));  
  5.         else ui->label->setText(tr(“連接到服務器成功”));  
  6.     }  
  7.     if (ftp->currentCommand() == QFtp::Login){  
  8.         if(error) ui->label->setText(tr(“登錄出現錯誤:%1″).arg(ftp->errorString()));  
  9.         else ui->label->setText(tr(“登錄成功”));  
  10.     }  
  11.     if (ftp->currentCommand() == QFtp::Get){  
  12.         if(error) ui->label->setText(tr(“下載出現錯誤:%1″).arg(ftp->errorString()));  
  13.         else {  
  14.             ui->label->setText(tr(“已經完成下載”));  
  15.             ui->textBrowser->setText(ftp->readAll());  
  16.         }  
  17.     }  
  18.     else if (ftp->currentCommand() == QFtp::Close){  
  19.         ui->label->setText(tr(“已經關閉連接”));  
  20.     }  

這個函數與ftpCommandStarted()函數相似,但是,它是在一個命令執行結束時執行的。它有兩個參數,第一個int id,就是調用命令時返回的編號,我們在上面已經講過了。第二個是bool error,它標志現在執行的命令是否出現了錯誤。如果出現了錯誤,那么error 為true ,否則為false。我們可以利用它來輸出錯誤信息。在這個函數中,我們在完成一條命令時顯示不同的狀態信息,并顯示可能的出錯信息。在if (ftp->currentCommand() == QFtp::Get) 中,也就是已經完成下載時,我們讓textBrowser顯示下載的信息。

#p#

6、運行程序,效果如下。

登錄狀態。

Qt 網絡之FTP 網絡學習基礎

下載完成后。

Qt 網絡之FTP 網絡學習基礎

7.出錯演示。

下面我們演示一下出錯時的情況。

將構造函數中的代碼ftp->login();改為ftp->login(“tom”,”123456″);

這時我們再運行程序:

Qt 網絡之FTP 網絡學習基礎

可以看到,它輸出了錯誤信息,指明了錯誤的指令和出錯的內容。其實我們設置的這個錯誤,也是想告訴大家,在FTP中如果沒有設置用戶名和密碼,那么默認的用戶名應該是anonymous,這時密碼可以任意填寫,而使用其他用戶名是會出錯的。

在下一節中,我們將會對這個程序進行擴展,讓它可以瀏覽服務器上的所有文件,并進行下載。

本文來自:www.yafeilinux.com   

小結:Qt 網絡之FTP 網絡學習基礎的內容介紹完了,更多內容,請參考編輯推薦。給大家推薦與此文相關的幾篇文章,供您參考。

http://mobile.51cto.com/symbian-268176.htm       qt網絡
http://mobile.51cto.com/symbian-268170.htm       http 編程
http://mobile.51cto.com/symbian-268167_1.htm     獲取網絡地址

責任編輯:zhaolei 來源: 網絡轉載
相關推薦

2011-06-27 09:02:18

Qt UDP 網絡

2011-06-27 10:28:45

Qt 網絡 TCP

2011-06-27 10:15:22

Qt 網絡 TCP

2011-06-02 10:28:18

2011-06-02 10:28:21

Rsh

2011-06-02 11:34:31

Nbtstat

2011-06-02 14:36:25

Netstat

2011-06-02 11:21:59

Tftp

2011-06-02 10:28:15

網絡命令Arp

2011-06-02 14:36:19

Route

2011-06-02 14:36:22

Runas

2011-06-10 12:17:52

Qt 網絡

2011-06-10 12:44:09

2011-06-02 10:28:11

網絡命令

2011-06-10 13:21:00

Qt 網絡

2010-06-28 14:38:12

FTP協議

2019-03-29 10:31:53

2011-06-22 16:18:23

QT 多線程 QSocket

2021-12-03 09:49:59

鴻蒙HarmonyOS應用

2010-06-09 15:23:25

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日本久久 | 中文字幕在线剧情 | 国产成人99久久亚洲综合精品 | 日韩亚洲一区二区 | 欧美日韩综合视频 | 国产片一区二区三区 | 精品99在线 | 在线中文字幕av | 中文字幕视频在线观看 | 亚洲成人精选 | 国产视频不卡一区 | 久久精品国产一区二区电影 | 国产高清在线 | 日本偷偷操 | 在线视频一区二区三区 | 男女下面一进一出网站 | 亚洲精品久久视频 | 免费黄色片在线观看 | 日本天堂视频在线观看 | 日韩成人免费视频 | 国产一级片久久久 | 日韩在线免费视频 | 视频三区 | 91九色在线观看 | 欧美一区二区 | 久久亚洲综合 | 成人区精品| 日韩视频国产 | 亚洲日本欧美日韩高观看 | 中文字幕高清在线 | 日韩国产中文字幕 | 中日av| 黄色一级免费 | 久久久久久蜜桃一区二区 | 中文字幕中文字幕 | 91文字幕巨乱亚洲香蕉 | a级片网站| 亚洲精品久久久蜜桃 | 操操日| 人人九九精 | 水蜜桃亚洲一二三四在线 |