《MFC編程:FTP多線程網(wǎng)絡(luò)編程實驗》要點:
本文介紹了MFC編程:FTP多線程網(wǎng)絡(luò)編程實驗,希望對您有用。如果有疑問,可以聯(lián)系我們。
相關(guān)主題:C/C++和VC / 桌面軟件開發(fā)
掌握多線程技術(shù),利用MFC WININET類實現(xiàn)對FTP服務(wù)器的各種操作。包括:連接服務(wù)器、查詢文件、上傳文件、下載文件等等,可以選擇其中幾個功能實現(xiàn)。
1、創(chuàng)建一個MFC工程:工程名稱為FTP;
2、界面設(shè)計:界面運行效果如圖:
其中3個編輯框(EditBox),4個按鈕(Button),一個列表框(ListBox),這些控件的屬性設(shè)置如下:
控件類型 | 控件ID | Caption(標題) | 說明 |
EditBox | IDC_EDIT_FTP | 輸入服務(wù)器IP地址 | |
EditBox | IDC_EDIT_NAME | 輸入登陸FTP服務(wù)器的帳戶 | |
EditBox | IDC_EDIT_PWD | 輸入登陸帳戶密碼 | |
Button | IDOK | 查詢 | |
Button | IDC_DOWNLOAD | 下載 | |
Button | IDC_UPLOAD | 上傳 | |
Button | IDCANCLE | 取消 | |
ListBox | IDC_LIST_FILE | 顯示服務(wù)器當前目錄的所有文件 |
3、為控件對象定義相應(yīng)的成員變量
利用類向?qū)崿F(xiàn),設(shè)置如下:
控件ID | 變量名稱 | 變量類別 | 變量類型 |
IDC_EDIT_IP | m_strFtp | value | CString |
IDC_EDIT_NAME | m_strName | value | CString |
IDC_EDIT_Pwd | m_strPwd | value | CString |
IDC_LIST_FILE | m_listFile | Control | CListBox |
4、引入頭文件
在FTPDlg.cpp 中引入#include "Afxinet.h"
5、為工程添加頭文件mt.h:
? 在文件視圖圖(File View)中添加;
? 文件中的代碼見附錄1
6、處理按鈕事件
(1)“查詢”的按鈕
//當用戶點擊'查詢'按鈕,執(zhí)行此函數(shù)。
void CFtpDlg::OnQuery()
{
UpdateData(TRUE);
FTP_INFO*PP=new FTP_INFO;
PP->pList=&m_listFile;
PP->strFtpSite=m_strFtp;
PP->strName=m_strName;
PP->strPwd=m_strPwd;
//清除對話框中列表框的內(nèi)容
while(m_listFile.GetCount()!=0)m_listFile.DeleteString(0);
//創(chuàng)建并啟動新線程,執(zhí)行實際的查詢?nèi)蝿?wù)
AfxBeginThread(mtQuery,PP);
}
(2)“下載”的按鈕
//當用戶點擊"下載"按鈕時,執(zhí)行此函數(shù)
void CFtpDlg::OnDownload()
{
UpdateData(TRUE);//構(gòu)造用于線程控制函數(shù)參數(shù)傳遞的結(jié)構(gòu)對象
FTP_INFO *PP = new FTP_INFO;//將用戶輸入的相關(guān)信息賦值到結(jié)構(gòu)對象的成員變量中
PP->pList = &m_listFile;
PP->strFtpSite=m_strFtp;
PP->strName = m_strName;
PP->strPwd = m_strPwd;
//創(chuàng)建并啟動新的線程,完成實際的下載任務(wù)
AfxBeginThread(mtDownloadFile,PP);
}
(3)“上傳”的按鈕
//當用戶點擊"上傳"按鈕時,執(zhí)行此函數(shù)
void CFtpDlg::OnUpload()
{
UpdateData(TRUE);
//將對話框中用于輸入的文本框控件禁用
m_editFtp.EnableWindow(FALSE);//服務(wù)器域名輸入文本框
m_editName.EnableWindow(FALSE);//登陸客戶名輸入文本框
m_editPwd.EnableWindow(FALSE);//口令輸入文本框
m_staFtp.EnableWindow(FALSE);//響應(yīng)的靜態(tài)文本
m_staName.EnableWindow(FALSE);
m_staPwd.EnableWindow(FALSE);
//禁用對話框中查詢按鈕
m_btnQuery.EnableWindow(FALSE);
//構(gòu)造用于線程控制函數(shù)參數(shù)傳遞的結(jié)構(gòu)對象
FTP_INFO*pp=new FTP_INFO;
//將用戶輸入的相關(guān)信息賦值到結(jié)構(gòu)對象的成員變量中
pp->pList=NULL;
pp->strFtpSite=m_strFtp;
pp->strName=m_strName;
pp->strPwd=m_strPwd;
//船檢并啟動新的線程,來完成實際的上傳工作
AfxBeginThread(mtUploadFile,pp);
}
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/94.html