《MFC編程:FTP多線程網絡編程實驗》要點:
本文介紹了MFC編程:FTP多線程網絡編程實驗,希望對您有用。如果有疑問,可以聯系我們。
掌握多線程技術,利用MFC WININET類實現對FTP服務器的各種操作。包括:連接服務器、查詢文件、上傳文件、下載文件等等,可以選擇其中幾個功能實現。
1、創建一個MFC工程:工程名稱為FTP;
2、界面設計:界面運行效果如圖:
其中3個編輯框(EditBox),4個按鈕(Button),一個列表框(ListBox),這些控件的屬性設置如下:
控件類型 | 控件ID | Caption(標題) | 說明 |
EditBox | IDC_EDIT_FTP | 輸入服務器IP地址 | |
EditBox | IDC_EDIT_NAME | 輸入登陸FTP服務器的帳戶 | |
EditBox | IDC_EDIT_PWD | 輸入登陸帳戶密碼 | |
Button | IDOK | 查詢 | |
Button | IDC_DOWNLOAD | 下載 | |
Button | IDC_UPLOAD | 上傳 | |
Button | IDCANCLE | 取消 | |
ListBox | IDC_LIST_FILE | 顯示服務器當前目錄的所有文件 |
3、為控件對象定義相應的成員變量
利用類向導實現,設置如下:
控件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)“查詢”的按鈕
//當用戶點擊'查詢'按鈕,執行此函數。
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;
//清除對話框中列表框的內容
while(m_listFile.GetCount()!=0)m_listFile.DeleteString(0);
//創建并啟動新線程,執行實際的查詢任務
AfxBeginThread(mtQuery,PP);
}
(2)“下載”的按鈕
//當用戶點擊"下載"按鈕時,執行此函數
void CFtpDlg::OnDownload()
{
UpdateData(TRUE);//構造用于線程控制函數參數傳遞的結構對象
FTP_INFO *PP = new FTP_INFO;//將用戶輸入的相關信息賦值到結構對象的成員變量中
PP->pList = &m_listFile;
PP->strFtpSite=m_strFtp;
PP->strName = m_strName;
PP->strPwd = m_strPwd;
//創建并啟動新的線程,完成實際的下載任務
AfxBeginThread(mtDownloadFile,PP);
}
(3)“上傳”的按鈕
//當用戶點擊"上傳"按鈕時,執行此函數
void CFtpDlg::OnUpload()
{
UpdateData(TRUE);
//將對話框中用于輸入的文本框控件禁用
m_editFtp.EnableWindow(FALSE);//服務器域名輸入文本框
m_editName.EnableWindow(FALSE);//登陸客戶名輸入文本框
m_editPwd.EnableWindow(FALSE);//口令輸入文本框
m_staFtp.EnableWindow(FALSE);//響應的靜態文本
m_staName.EnableWindow(FALSE);
m_staPwd.EnableWindow(FALSE);
//禁用對話框中查詢按鈕
m_btnQuery.EnableWindow(FALSE);
//構造用于線程控制函數參數傳遞的結構對象
FTP_INFO*pp=new FTP_INFO;
//將用戶輸入的相關信息賦值到結構對象的成員變量中
pp->pList=NULL;
pp->strFtpSite=m_strFtp;
pp->strName=m_strName;
pp->strPwd=m_strPwd;
//船檢并啟動新的線程,來完成實際的上傳工作
AfxBeginThread(mtUploadFile,pp);
}
轉載請注明本頁網址:
http://www.fzlkiss.com/jiaocheng/94.html