偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

解析 Qt 網(wǎng)絡(luò)之FTP 網(wǎng)絡(luò)學(xué)習(xí)基礎(chǔ)

移動開發(fā)
Qt 網(wǎng)絡(luò)之FTP 網(wǎng)絡(luò)學(xué)習(xí)基礎(chǔ)是本文要介紹的內(nèi)容,F(xiàn)TP即文件傳輸協(xié)議。在本文中有詳細(xì)的介紹。先來看內(nèi)容。

Qt 網(wǎng)絡(luò)FTP 網(wǎng)絡(luò)學(xué)習(xí)基礎(chǔ)是本文要介紹的內(nèi)容,先來可能內(nèi)容。FTP即File Transfer Protocol,也就是文件傳輸協(xié)議。FTP的主要作用,就是讓用戶連接上一個遠(yuǎn)程計算機(jī),查看遠(yuǎn)程計算機(jī)有哪些文件,然后把文件從遠(yuǎn)程計算機(jī)上拷貝到本地計算機(jī),或者把本地計算機(jī)的文件送到遠(yuǎn)程計算機(jī)上。

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

Qt 網(wǎng)絡(luò)之FTP 網(wǎng)絡(luò)學(xué)習(xí)基礎(chǔ)

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

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

Qt 網(wǎng)絡(luò)之FTP 網(wǎng)絡(luò)學(xué)習(xí)基礎(chǔ)

下面我們先看一個簡單的FTP客戶端的例子,然后對它進(jìn)行擴(kuò)展。

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

1、我們新建Qt4 Gui QApplication 。

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

2、修改widget.ui文件。

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

Qt 網(wǎng)絡(luò)之FTP 網(wǎng)絡(luò)學(xué)習(xí)基礎(chǔ)

3、在main.cpp中進(jìn)行修改。

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

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

#p#

4、在widget.h中進(jìn)行修改。

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

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

添加私有槽函數(shù):

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

5、在widget.cpp中進(jìn)行更改。

(1)在構(gòu)造函數(shù)中添加代碼:

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

我們在構(gòu)造函數(shù)里執(zhí)行了幾個FTP的操作,登錄站點,并下載了一個文件。然后我們又關(guān)聯(lián)了兩個信號和槽,用來跟蹤命令的執(zhí)行情況。

(2)實現(xiàn)槽函數(shù):

  1. void Widget::ftpCommandStarted(int)  
  2. {  
  3.     if(ftp->currentCommand() == QFtp::ConnectToHost){  
  4.         ui->label->setText(tr(“正在連接到服務(wù)器…”));  
  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(“正在關(guān)閉連接…”));  
  14.     }  

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

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

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

#p#

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

登錄狀態(tài)。

Qt 網(wǎng)絡(luò)之FTP 網(wǎng)絡(luò)學(xué)習(xí)基礎(chǔ)

下載完成后。

Qt 網(wǎng)絡(luò)之FTP 網(wǎng)絡(luò)學(xué)習(xí)基礎(chǔ)

7.出錯演示。

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

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

這時我們再運行程序:

Qt 網(wǎng)絡(luò)之FTP 網(wǎng)絡(luò)學(xué)習(xí)基礎(chǔ)

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

在下一節(jié)中,我們將會對這個程序進(jìn)行擴(kuò)展,讓它可以瀏覽服務(wù)器上的所有文件,并進(jìn)行下載。

本文來自:www.yafeilinux.com   

小結(jié):Qt 網(wǎng)絡(luò)之FTP 網(wǎng)絡(luò)學(xué)習(xí)基礎(chǔ)的內(nèi)容介紹完了,更多內(nèi)容,請參考編輯推薦。給大家推薦與此文相關(guān)的幾篇文章,供您參考。

http://mobile.51cto.com/symbian-268176.htm       qt網(wǎng)絡(luò)
http://mobile.51cto.com/symbian-268170.htm       http 編程
http://mobile.51cto.com/symbian-268167_1.htm     獲取網(wǎng)絡(luò)地址

責(zé)任編輯:zhaolei 來源: 網(wǎng)絡(luò)轉(zhuǎn)載
相關(guān)推薦

2011-06-27 09:02:18

Qt UDP 網(wǎng)絡(luò)

2011-06-27 10:28:45

Qt 網(wǎng)絡(luò) TCP

2011-06-27 10:15:22

Qt 網(wǎng)絡(luò) TCP

2011-06-02 10:28:18

2011-06-02 10:28:21

Rsh

2011-06-02 14:36:25

Netstat

2011-06-02 11:34:31

Nbtstat

2011-06-02 11:21:59

Tftp

2011-06-02 14:36:19

Route

2011-06-02 10:28:15

網(wǎng)絡(luò)命令Arp

2011-06-02 14:36:22

Runas

2011-06-10 12:17:52

Qt 網(wǎng)絡(luò)

2011-06-10 12:44:09

2011-06-02 10:28:11

網(wǎng)絡(luò)命令

2011-06-10 13:21:00

Qt 網(wǎng)絡(luò)

2010-06-28 14:38:12

FTP協(xié)議

2019-03-29 10:31:53

2011-06-22 16:18:23

QT 多線程 QSocket

2021-12-03 09:49:59

鴻蒙HarmonyOS應(yīng)用

2010-06-09 15:23:25

點贊
收藏

51CTO技術(shù)棧公眾號