《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.vephp.com/jiaocheng/94.html