freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

ftp多線程下載工具畢業(yè)論文(參考版)

2024-08-31 17:58本頁面
  

【正文】 } auto it = info()。 = 0。查找數(shù)據(jù)塊的函數(shù)實(shí)現(xiàn)為: DdRange DdController::_findNoDdRange(DdInfoEx *info) { DdRange range。 DdController接收到線程的空閑事件后,DdController查找線程對(duì)應(yīng)的 DdInfoEx結(jié)構(gòu)體,查看 DdInfoEx結(jié)構(gòu)體中是否還有未下載的數(shù)據(jù)塊(對(duì)于一個(gè)新建的下載任務(wù),答案是肯定的)。然后,創(chuàng)建一個(gè)DdInfoEx數(shù)據(jù)結(jié)構(gòu)和 N個(gè)下載線程( N的大小等于計(jì)算出的線程數(shù)),下載控制類和下載線程分別持有 DdInfoEx的引用計(jì)數(shù),故 DdInfoEx的引用計(jì)數(shù)為 N + 1。 用戶 新建一個(gè)下載任務(wù)時(shí), DdController類根據(jù)線程分配額度和文件大小計(jì)算出需要多少個(gè)線程執(zhí)行下載任務(wù)。如完成進(jìn)度、已下載完成部分、正在下載的部分、未下載的部分。 DdInfo基類存儲(chǔ)了下載相關(guān)的信息,如下載路徑、下載文件名、本地存儲(chǔ)路徑等等。 圖 13 下載模塊的數(shù)據(jù)結(jié)構(gòu) UML圖 DdInfoEx數(shù)據(jù)結(jié)構(gòu)是下載控制類 DdController操作的數(shù)據(jù)結(jié)構(gòu), DdInfo是DdInfoEx的基類。 線程任務(wù)分配的設(shè)計(jì)實(shí)現(xiàn) 當(dāng)線程空閑時(shí),則需要向該線程分配任務(wù)。 如上所示,當(dāng)線程空閑的時(shí)候,可以向控制類發(fā)送 DD_CMD為 R_IDLE的空閑事件。 //如上所示的命令 QThread *thread。 //范圍、。 enum DD_CMD {//C開頭的是控制類發(fā)送給線程類的命令 //R開頭的是線程類給控制類的響應(yīng) R_IDLE, //空閑 C_DOWNLOAD, //下載 C_KILL, //殺死 R_DONE_REAL_TIME,//實(shí)時(shí) C_STOP_DOWNLOAD,//停止下載 R_STOP_DOWNLOAD_OK, //停止下載成功 R_STOP_DOWNLOAD_ERROR,//停止下載出錯(cuò) R_INIT_ERROR, //初始化失敗 R_DOWNLOAD_ERROR, //下載錯(cuò)誤 C_SAVE_STATUS, //保存 }。然后,可以調(diào)用 QCoreApplication::posEvent函數(shù)將自定義的事件投入到指定線程的事件隊(duì)列中,該線程中的類可以通過重載 QObject類的虛函數(shù) customEvent接收事件。每個(gè)線程都有自己的事件隊(duì)列,相對(duì)于 windows的消息隊(duì)列。下載控制類運(yùn)行在主線程中,下載控制類與下載線程的通信是下載資源模塊的重點(diǎn)。 下載模塊的技術(shù)與實(shí)現(xiàn) 東華理工大學(xué)畢業(yè)設(shè)計(jì)(論文) 系統(tǒng)功能的詳細(xì)設(shè)計(jì)和實(shí)現(xiàn) 26 多線程通信的設(shè)計(jì)實(shí)現(xiàn) 下載資源時(shí),下載控制類根據(jù)文件的大小和程序運(yùn)行參數(shù)分配一定數(shù)量的線程。當(dāng)前只實(shí)現(xiàn)了九個(gè)基本的 FTP 命令,要擴(kuò)展其他命令也是簡單 的。 RequestCmdXXX 系列類的結(jié)構(gòu)比較簡單,所有的類都只包括初始化函數(shù),執(zhí)行函數(shù)和重置函數(shù)。模版參數(shù)的不同指定了輸出日志的方式不同。 DownloadFileHelper 是下載文件幫助類; DownloadListHelper 是獲取文件列表幫助類。 FTP 命令執(zhí)行的技術(shù)實(shí)現(xiàn) FTP命令類是執(zhí)行 FTP命令的類,當(dāng)前實(shí)現(xiàn)了執(zhí)行九個(gè) FTP命令。m_userInfouser, amp。cmdVector::cmd_login, RequestInfo::set_login_info(this, amp。 RequestInfo的數(shù)據(jù)成員比較復(fù)雜, RequestInfo提供了相關(guān)的靜態(tài)函數(shù)輔助命令參數(shù)的添加。 }param_out。 struct _retr_Out { DataRecv *data。 東華理工大學(xué)畢業(yè)設(shè)計(jì)(論文) 系統(tǒng)功能的詳細(xì)設(shè)計(jì)和實(shí)現(xiàn) 25 struct _list_Out { DataRecv *filelist。 union { struct _pwd_Out { QString *path。 }retr_in。 quint64 start。 struct _retr_In { QString *restrPath。 //登錄信息的參數(shù) struct _cwd_In { QString *cwdPath。 QString *password。 //接收的數(shù)據(jù) PTR callPtr。其存儲(chǔ)結(jié)構(gòu)為: struct RequestInfo { QTcpSocket *pSocket。 FUNC_PTR是一個(gè)指向成員函數(shù)的指針,指向了 RequestCore中處理 FTP命令的調(diào)用接口,如登錄命令: ptr = cmd_login。 RequestInfo *info。 FTP命令控制類為 RequestCore,它使用 C++標(biāo)準(zhǔn)庫中的列表容器 list存儲(chǔ) FTP命令。 //空實(shí)現(xiàn),給派生類使用 return _defaultHandle()。 } else {//FAILED return _errorHandle(hr)。 GetRequestCore()EraseCurrentCmd()。 //執(zhí)行當(dāng)前命令 if (hr == E_CONTINUE) {//當(dāng)前命令未處理完畢 return _clearRecvData()。 } m_bIsFirstRecv = false。) {//服務(wù)器繁忙 _errorHandle(SERVER_BUSY)。 //接收的數(shù)據(jù)不完整 } if (m_bIsFirstRecv) //接收到服務(wù)器的第一次應(yīng)答 { if (m_recvStr[0] != 39。 //檢查數(shù)據(jù)的完整性 if (hr != E_OK) { 東華理工大學(xué)畢業(yè)設(shè)計(jì)(論文) 系統(tǒng)功能的詳細(xì)設(shè)計(jì)和實(shí)現(xiàn) 23 if (FAILED(hr)) //接收的數(shù)據(jù)異常 {//error _errorHandle(hr)。 其實(shí)現(xiàn)代碼如下: void WorkSocket::_read() //接收數(shù)據(jù)的槽 { ERESULT hr = E_OK。最后,判斷 FTP 命令控制類中是否有當(dāng)前正在執(zhí)行的 FTP 命令,如果存在,則將數(shù)據(jù)交給它去處理。其次檢查服務(wù)器的狀態(tài),在連接上服務(wù)器后,服務(wù)器會(huì)發(fā)送狀態(tài)信息。下載系統(tǒng)中由套接字基類 WorkSocket 接收服務(wù)器應(yīng)答數(shù)據(jù), WorkSocket 繼承自 QTcpSocket。系統(tǒng)會(huì)在函數(shù)有結(jié)果時(shí)通過某種方式向調(diào)用線程反饋調(diào)用結(jié)果。在使用套接字編程時(shí),要注意套接字有阻塞、非阻塞兩種工作模式,在阻塞模式下,調(diào)用套接字的相關(guān)函數(shù)(如調(diào)用recv 函數(shù)),當(dāng)前線程會(huì)一直阻塞在這個(gè)函數(shù)調(diào)用上,直到函數(shù)返回。 ERESULT 有如下值: define E_CONTINUE 1 //表示并未完全成功,需要后續(xù)步驟 define E_OK 0 //調(diào)用成功 define SERVER_ADDRESS_ERROR 1 define USER_ERROR 2 define PASSWORD_ERROR 3 define SERVER_NOT_REPLAY 4 define UNKNOWN_ERROR 5 東華理工大學(xué)畢業(yè)設(shè)計(jì)(論文) 系統(tǒng)功能的詳細(xì)設(shè)計(jì)和實(shí)現(xiàn) 22 define SERVER_REFUSE 6 //服務(wù)器拒絕 define CMD_EXECUTE_FAILED 7 //命令執(zhí)行失敗 define CMD_NOT_SEARCH 8 //命令未找到 define CLIENT_BUSY 9 //程序正在執(zhí)行其他命令 define SERVER_BUSY 10 //服務(wù)器繁忙 define E_FAIL 11 //單純性錯(cuò)誤 define SERVER_ANSWER_ERROR 12 //服務(wù)器回答碼無法解析錯(cuò)誤 define DATA_CONNECT_ERROR 13 //數(shù)據(jù)連接出錯(cuò) define DATA_TYPE_REFUSE 14 //該數(shù)據(jù)類型服務(wù)器沒有實(shí)現(xiàn) define CREATE_FILE_ERROR 15 //創(chuàng)建文件失敗 //省略 ??????????????????????? 檢查函數(shù)的執(zhí)行成功或失敗可以使用宏 : define SUCCEEDED(hr) (((ERESULT)(hr)) = 0) define FAILED(hr) (((ERESULT)(hr)) 0) 服務(wù)器接受請(qǐng)求應(yīng)答實(shí)現(xiàn) FTP 協(xié)議以命令 —— 應(yīng)答碼的格式進(jìn)行交互。函數(shù)的返回值表示了函數(shù)的運(yùn)行結(jié)果,調(diào)用一個(gè)有功能實(shí)現(xiàn)的函數(shù),并不能假設(shè)它運(yùn)行一定是成功的。 程序返回值的定義 一個(gè)健壯的系統(tǒng)中,大部分函數(shù)都應(yīng)該具有返回值。標(biāo)記為 2的部分,顯示正在下載的任務(wù)信息,一個(gè)下載任務(wù)信息包括文件名、文件大小、下載百分比、下載速率、下載線程數(shù)、文件位置。 m_cmdController = new CmdController()。)), this, SLOT(_serverListdbclicked(const QModelIndex amp。 connect(, SIGNAL(clicked()), this, SLOT(_quit()))。 connect(, SIGNAL(clicked()), this, SLOT(_searchHistory()))。 connect(, SIGNAL(clicked()), this, SLOT(_download()))。 setText(AppInfo::GetInstance()GetCurrentPath())。下載系統(tǒng)界面管理類 AppUI的構(gòu)造函數(shù)代碼如下: AppUI::AppUI(QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags) , m_bIsQuitApp(false) { (this)。關(guān)聯(lián)后,當(dāng)該子類的成員函數(shù) show被調(diào)用時(shí),窗口將會(huì)顯示出來。只需從 Qt界面類 (如 QMainWindow、 QDialog)中派生一個(gè)子類。保存后的文件后綴名為 ui,可以用記事本打開該文件,可 以看到里面以 XML格式存儲(chǔ)了相關(guān)的控件信息。 東華理工大學(xué)畢業(yè)設(shè)計(jì)(論文) 系統(tǒng)功能的詳細(xì)設(shè)計(jì)和實(shí)現(xiàn) 20 5 系統(tǒng)功能的詳細(xì)設(shè)計(jì)和實(shí)現(xiàn) 程序界面設(shè)計(jì)實(shí)現(xiàn) 下載系統(tǒng)的界面使用 Qt的自帶工具 Qt Designer進(jìn)行設(shè)計(jì), Qt Designer工具提供可視化設(shè)計(jì)圖形界面的能力。首先創(chuàng)建一個(gè) FTP 命令控制類,將相關(guān)的命令及命令參數(shù)壓入其中。 FTP 命令執(zhí)行類由一個(gè) FTP命令控制類進(jìn)行管理,外界并不知道 FTP 命令執(zhí)行類的存在。 為了便于管理。在實(shí)現(xiàn) FTP 命令的發(fā)送機(jī)制時(shí),將耦合度高的 FTP 命令整合到一個(gè) FTP 執(zhí)行類中,如 USER 命令和 PASS 命令。 FTP 具有擴(kuò)展性,未來可能增添一系列的新命令。 }。 //檢查接受字符完整性 protected: QByteArray m_recvStr。str)。str)。 //清除接收的數(shù)據(jù) 東華理工大學(xué)畢業(yè)設(shè)計(jì)(論文) 系統(tǒng)概 要設(shè)計(jì) 19 //命令處理完畢調(diào)用此函數(shù) virtual void _cmdProcessingCompleted()。 virtual void _errorHandle(ERESULT hr)。 //斷開連接槽 protected: virtual void _defaultHandle()。 //是否接受到服務(wù)器的初始信息 private slots: void _read()。 //連接服務(wù)器 ERESULT Disconnected()。 ERESULT Connect(const QString amp。 virtual ~WorkSocket()。 RemoteServer遠(yuǎn)程訪問類和 DDSocket下載套接字繼承自 WorkSocket。 東華理工大學(xué)畢業(yè)設(shè)計(jì)(論文) 系統(tǒng)概要設(shè)計(jì) 18 圖 11 WorkSocet 類的 UML圖 WorkSocket 類繼承中 QTcpSocket 類。它們的不同點(diǎn):日志處理方式不同,在遠(yuǎn)程訪問模塊,日志輸出到界面的日志欄中,而下載的日志將不進(jìn)行顯示;使用的 FTP命令不同,下載資源主要使用 FTP的下載命令,需要接收大量的數(shù)據(jù),遠(yuǎn)程訪問模塊主要是接收服務(wù)器的狀態(tài)信息,接收數(shù)據(jù)量少。 } void AppInfo::SetStorageValue(QString key, QString value) { m_pSetsetValue(key, value)。 } AppInfo::AppInf
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1