贵州大学实验报告学院:计算机科学与技术专业:XXX班级:XXX姓名XXX学号XXX实验组实验时间2015、5、11指导教师XXX成绩实验项目名称FTP客户端的设计实验目的1.学会使用MFCWinInet类编程程序;2.学会使用MFC类向导添加事件处理函数和成员变量。实验要求程序能实现基本的FTP客户端功能,能登陆FTP服务器,显示登录客户目录下的文件和目录名,能从该目录中选择下载服务器的文件,也能向服务器上传文件。实验仪器VC++6.0实验内容1.使用MFCAppWizard创建应用程序框架工程名是Ftp,应用程序的类型是基于对话框的,其它部分接受系统的默认设置就可以。应用程序包括两个类:应用程序类:CFtpApp,对应的文件是Ftp.h和Ftp.cpp。对话框类:CFtpDlg,对应的文件是FtpDlg.h和FtpDlg.cpp。2.为对话框添加控件在程序的主对话框界面中按照图3-11添加相应的可视控件对象,并按照表3.11修改控件的属性。表3.11对话框中的控件属性控件类型控件IDCaption静态文本statictextIDC_STATIC_FTP服务器域名静态文本statictextIDC_STATIC_NAME用户登录名静态文本statictextIDC_STATIC_PWD登录口令静态文本statictextIDC_STATIC_FILE目录文件列表编辑框editboxIDC_EDIT_FTP编辑框editboxIDC_EDIT_NAME编辑框editboxIDC_EDIT_PWD命令按钮buttonIDOK查询命令按钮buttonIDC_DOWNLOAD下载命令按钮buttonIDC_UPLOAD上传命令按钮buttonIDCANCLE退出列表框listboxIDC_LIST_FILE(sort不选)3.定义控件的成员变量按照表3.12,用类向导(ClassWizard)为对话框中的控件对象定义相应的成员变量。表3.12控件对象的成员变量控件IDControlIDs变量名称MemberVariableName变量类别Category变量类型VariableTypeIDC_STATIC_FTPm_staFtpControlCStaticIDC_STATIC_NAMEm_staNameControlCStaticIDC_STATIC_PWDm_staPwdControlCStaticIDC_EDIT_FTPm_strFtpValueCStringm_editFtpControlCEditIDC_EDIT_NAMEm_strNameValueCStringm_editNameControlCEditIDC_EDIT_PWDm_strPwdValueCStringm_editPwdControlCEditIDOKm_btnQueryControlCBottonIDC_DOWNLOADm_btnDownloadControlCBottonIDC_UPLOADm_btnUploadControlCBottonIDC_LIST_FILEm_listFileControlCListBox4.添加成员变量的初始化代码在FtpDlg.cpp文件的OnInitDialog()函数中添加成员变量的初始化代码。对服务器名,登录用户名,登录口令的控件变量赋初值。BOOLCFtpDlg::OnInitDialog(){.................//前面是MFC应用程序向导和类向导自动生成的代码//TODO:Addextrainitializationherem_strFtp=_T();//初始化服务器域名m_strName=_T();//初始化登录用户名m_strPwd=_T();//初始化登录口令UpdateData(FALSE);//更新界面returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}5.为对话框中的控件对象添加事件响应函数按照表3.13,用类向导(ClassWizard)为对话框中的控件对象添加事件响应函数。表3.13对话框控件的事件响应函数控件类型对象标识ObjectID消息Message函数Memberfunctions命令按钮IDOKBN_CLICKEDOnQuery命令按钮IDC_DOWNLOADBN_CLICKEDOnDownload命令按钮IDC_UPLOADBN_CLICKEDOnUpload列表框IDC_LIST_FILELBN_SELCHANGEOnSelchangeListFile6.为CFtpDlg类添加其它的成员函数BOOLCFtpDlg::Download(CStringstrSName,CStringstrDName);BOOLCFtpDlg::Upload(CStringstrSName,CStringstrDName);分别用于文件的下载和上传。7.手工添加包含语句在CFtpDlg类的FtpDlg.cpp文件中添加对于Afxinet.h的包含命令,来获得对于MFCWinInet类的支持。8.添加事件函数和成员函数的代码实验数据界面实现编译源程序,通过后运行程序对程序的基本界面进行测试,结果图如下:1查询并显示FTP服务器的当前目录内容当用户输入了服务器名、登录用户名和口令后,点击‘查询’按钮,会产生BN_CLICKED事件,导致执行对应的函数OnQuery()。代码如下:voidCFtpDlg::OnQuery(){CInternetSession*pSession;//定义会话对象指针变量CFtpConnection*pConnection;//定义连接对象指针变量CFtpFileFind*pFileFind;//定义文件查询对象指针变量CStringstrFileName;BOOLbContinue;pConnection=NULL;//初始化pFileFind=NULL;首先输入服务器域名“localhost”,登录用户名和口令,然后点击查询按钮:如图表示登陆成功后,查询到目录下的文件。实现文件下载功能//查询以后,当用户在列表框中选择了一个文件时,执行此函数。voidCFtpDlg::OnSelchangeListFile(){//禁用用来输入的文本框控件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_btnUpload.EnableWindow(FALSE);//上传按钮m_btnQuery.EnableWindow(FALSE);//查询按钮//激活下载按钮m_btnDownload.EnableWindow(TRUE);}//当用户点击“下载”按钮时,执行此函数voidCFtpDlg::OnDownload(){//获得当前输入在查询完成后,在列表框中选择要下载的文件,点击“下载”按钮:在弹出的对话框中选择下载位置,并重命名下载文件,点击保存。如下图,表示下载成功:实现文件上传功能//当用户点击“上传”按钮时,执行此函数voidCFtpDlg::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);点击“上传”按钮,在弹出的对话框中选择要上传的文件,然后点击“打开”:客户端程序提示“上传成功!”实验总结在本次实验过程中,通过上机基本掌握了winlnet类的编程,学会使用MFCWinInet类编程程序;学会使用MFC类向导添加事件处理函数和成员变量。指导教师意见签名:年月日