qt之網路ftp 下

2021-07-31 23:50:52 字數 4591 閱讀 8015

環境:windows xp + qt 4.8.5+qtcreator 2.8.0

一、修改介面

我們刪除了textbrowser,加入了幾個labelline editpush button部件,乙個tree widget及乙個progress bar部件。然後我們對其中幾個部件做如下更改。

(1)將「ftp伺服器」標籤後的line editobjectname屬性改為ftpserverlineedit,其text屬性改為ftp.qt-project.org

(2)將「使用者名稱」標籤後的line editobjectname屬性改為usernamelineedit,其text屬性改為anonymous,將其tooltip屬性改為「預設使用者名稱請使用:anonymous ,此時密碼任意。」

(3)將「密碼」標籤後的line editobjectname屬性改為passwordlineedit,其text屬性改為123456,將其echomode屬性改為password

(4)將「連線」按鈕的objectname屬性改為connectbutton

(5)將「返回上一級目錄」按鈕的objectname屬性改為cdtoparentbutton

(7)將tree widgetobjectname屬性改為filelist,然後在tree widget部件上單擊滑鼠右鍵,選擇edit items選單,新增列屬性如下。

最終介面如圖所示:

二、功能實現

1.更改widget.h檔案。

(1)新增標頭檔案#include

(2)在private中新增變數:

qhashbool> isdirectory; //用來儲存乙個路徑是否為目錄的資訊

qstring currentpath; //用來儲存現在的路徑

qfile *file;

(3)新增槽:

private slots:

void

on_downloadbutton_clicked();

void

on_cdtoparentbutton_clicked();

void

on_connectbutton_clicked();

void

ftpcommandfinished

(int,bool)

;void

ftpcommandstarted

(int)

;void

updatedatatransferprogress

(qint64,qint64 )

;//更新進度條

//將伺服器上的檔案新增到tree widget中

void

addtolist

(const qurlinfo &urlinfo)

;void

processitem

(qtreewidgetitem*,int)

;//雙擊乙個目錄時顯示其內容

2.更改widget.cpp的內容。

(1)實現「連線」按鈕的單擊事件槽。

void widget::on_connectbutton_clicked()   //連線按鈕

我們在「連線」按鈕的單擊事件槽函式中新建了ftp物件,然後關聯了相關的訊號和槽。這裡的listinfo()訊號由ftp->list()函式發射,它將在登入命令完成時呼叫,下面我們提到。而datatransferprogress()訊號在資料傳輸時自動發射。最後我們從介面上獲得伺服器位址,使用者名稱和密碼等資訊,並以它們為引數執行連線和登入命令。

(2)更改ftpcommandfinished()函式。

我們在相應位置做更改。

首先,在登入命令完成時,我們呼叫list()函式:

ui->label->settext(tr("登入成功"));

ftp->list(); //發射listinfo()訊號,顯示檔案列表

ui->downloadbutton->setenabled(true);

file->close();

delete file;

最後再新增乙個if語句,處理list命令完成時的情況:

if (ftp->currentcommand() == qftp::list)

}

我們在list命令完成時,判斷檔案列表是否為空,如果為空,就讓tree widget不可用,並顯示「empty」條目。

(3)新增檔案列表函式的內容如下。

void widget::addtolist(const qurlinfo &urlinfo)  //新增檔案列表

}

ftp->list()函式執行時會發射listinfo()訊號,此時就會執行addtolist()函式,在這裡我們將檔案資訊顯示在tree widget上,並在isdirectory中儲存該檔案的路徑及其是否為目錄的資訊。為了使檔案與目錄進行區分,我們使用了不同的圖示file.pngdir.png來表示它們,這兩個圖示放在了工程資料夾中。

(4)將建構函式的內容更改如下。

這裡我們只是讓進度條的值為0,然後關聯了tree widget的乙個訊號itemactivated()。當滑鼠雙擊乙個條目時,發射該訊號,我們在槽函式中判斷該條目是否為目錄,如果是則進入該目錄。

(5)processitem()函式的實現如下。

void widget::processitem(qtreewidgetitem* item,int)  //開啟乙個目錄

}

(6)「返回上一級目錄」按鈕的單擊事件槽函式如下。

void widget::on_cdtoparentbutton_clicked()  //返回上級目錄按鈕

else

ftp->list();

}

在返回上一級目錄時,我們取當前路徑的最後乙個/之前的部分,如果此時路徑為空了,我們就讓「返回上一級目錄」按鈕不可用。

ui->downloadbutton->setenabled(false); ftp->get(ui->filelist->currentitem()->text(0), file);}

(8)更新進度條函式內容如下。

void widget::updatedatatransferprogress( //進度條

qint64 readbytes,qint64 totalbytes)

3.流程說明。

對於ftp的操作,全部由那些命令和訊號來完成,我們只需要呼叫相應的命令,並在其發出訊號時,進行對應的處理就可以了。而對於檔案的顯示,則是檢視部分的知識了。

4.執行程式,效果如下圖所示。

ftp->abort()函式。你也可以參考qt自帶的ftp example例子。對於其他操作,比如上傳等,你可以根據需要新增。

ftp的相關程式設計就講到到這裡。

QT學習筆記之QT網路程式設計

tcp 傳輸控制協議,提供的是面向連線 可靠的位元組流服務。當客戶和伺服器彼此交換資料前,必須先在雙方之間建立乙個tcp連線,之後才能傳輸資料。tcp提供超時重發,丟棄重複資料,檢驗資料,流量控制等功能,保證資料能從一端傳到另一端。udp 使用者資料報協議,是乙個簡單的面向資料報的運輸層協議。udp...

網路安全 之 FTP,溢位攻擊

反正不管什麼,首先就要全部掃瞄 searchspolit,這個工具儲存了所有軟體不同版本的漏洞。就像乙個資料庫,儲存了所有版本軟體的漏洞。matasolit,遠端溢位工具 相當於找落後軟體的漏洞,因此最好更新到最新版本即可。利用緩衝區溢位攻擊,可以導致程式執行失敗 系統關機 重新啟動等後果。緩衝區溢...

大話QT之十 實現FTP斷點續傳

應用需求 且這三種傳輸資料方式是可配的,能夠通過不同的介面呼叫。相比這三種方式。基於udt的大量檔案傳輸是比較值得研究與創新的地方,它在底層是基於udp,在上層實現了可靠性的控制 同一時候它充分考慮到了基於在公網環境下基於tcp進行傳輸時擁塞控制演算法的缺點,實現了自己的擁塞控制演算法,在實際測試中...