ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:24.73KB ,
资源ID:8223549      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8223549.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验五FTP客户端.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验五FTP客户端.docx

1、实验五FTP客户端实验五 FTP客户端实现WinInet 介绍:2338534(1)WinInet 是一个网络编程接口,包含了 Internet 底层协议 HTTP,FTP。 (2)借助 WinInet 接口,可不必去了解 Winsock、TCP/IP 和特定 Internet 协议 的细节就可以编写Internet 客户端程序。 (3)WinInet 为 HTTP、FTP 提供了统一的函数集,也就是 Win32 API 接口。 (4)WinInet 简化了 HTTP、FTP 协议的编程,可轻松地将 Internet 集成到应用程序中。一、实验目的(1)掌握列表框控件的使用(2)了解MFC W

2、inInet类应用程序编程原理二、实验原理 本程序实现基本的FTP客户端功能,能登陆FTP服务器,显示登录客户目录下的文件,能从该目录中选择下载服务器的文件,也能向服务器上传文件。应用程序的类型是基于对话框的,主对话框用户界面如图1所示:图1 Ftp客户端程序的主对话框三个文本编辑框,分别用于输入FTP服务器域名,登录用户名和登录口令。一个列表框,用来显示FTP服务器当前目录的内容,并允许用户从中选择文件下载。四个命令按钮分别执行查询、上传、下载和退出的功能。用户执行程序的流程是:进行各种操作之前,应首先输入服务器域名,登录用户名和口令。如果要进行查询,可以点击查询按钮,调用OnQuery函数

3、。该函数获得用户当前输入的服务器名、登录用户名和口令等信息,清除列表框的内容;然号创建Internet会话类对象,进行服务器的登录,试图建立与指定FTP服务器的连接;如果连接成功,就创建CFtpFileFind文件检索类对象,查找服务器上当前目录的任意文件,找到了第一个文件后,继续找其它的文件,并将找到的文件或目录名显示在列表框中。所有文件找到后,结束查询,并依次删除文件查询对象、FTP连接对象和Internet 会话对象,结束会话。此时,可以从服务器下载文件。从列表框中选择一个文件,会产生LBN_SELCHANGE事件,自动调用相应的OnSelchangeListFile函数,禁用用来输入的

4、文本框控件,禁用查询和上传按钮,激活下载按钮。此时,用户可以点击下载按钮,产生BN_CLICKED事件,自动调用OnDownload函数,调用Download函数,下载该文件。下载完毕,禁用下载按钮,激活查询和上传按钮,激活用来输入的文本框控件。而Download函数重新创建Internet会话,建立FTP连接,下载文件后,将会话对象和连接对象清除。如果要向FTP服务器上传文件,点击“上传“按钮,产生BN_CLICKED事件,调用OnUpload函数,该函数获得当前输入的服务器名、登录用户名和口令,禁用用于输入的文本框控件,禁用查询按钮,禁用用于输入的文本框控件,弹出小对话框,获得待上传的本地

5、机文件路径和文件名,调用Upload函数上传文件。上传完毕,激活查询按钮,激活用于输入的文本和编辑控件。Upload函数也重新创建Internet会话,建立FTP连接,上传文件后,然后清除会话对象和连接对象。此程序的查询、下载和上传功能基本是独立的。每次都要创建会话,建立连接,执行操作,然后清除对象。此程序的主要的技术要点是:如何创建一个Internet会话,即创建CInternetSession对象;如何建立与FTP服务器的连接,即创建CFtpConnection对象;如果连接成功,如何获得当前登录的目录下的文件和目录名称,即检索一个目录下的文件,并显示文件信息;如何下载文件、上传文件以及关

6、闭连接。三、实验步骤(1)使用MFC AppWizard创建应用程序框架,工程名是Ftp,应用程序的类型是基于对话框的,其它部分接受系统的默认设置就可以,用户界面如图2所示。应用程序包括两个类: 关于对话框类:CAboutDlg应用程序类:CFtpApp,对应的文件是Ftp.h和Ftp.cpp。对话框类:CFtpDlg,对应的文件是FtpDlg.h和FtpDlg.cpp。图2 Ftp客户端程序的主对话框(2)为对话框添加控件,按照表1修改控件的属性。表1 对话框中的控件属性控件类型控件IDCaption静态文本 static textIDC_STATIC_FTP服务器域名静态文本 static

7、 textIDC_STATIC_NAME用户登录名静态文本 static textIDC_STATIC_PWD登录口令静态文本 static textIDC_STATIC_FILE目录文件列表编辑框 edit boxIDC_EDIT_FTP编辑框 edit boxIDC_EDIT_NAME编辑框 edit boxIDC_EDIT_PWD命令按钮 buttonIDOK查询命令按钮 buttonIDC_DOWNLOAD下载命令按钮 buttonIDC_UPLOAD上传命令按钮 buttonIDCANCEL退出列表框 listboxIDC_LIST_FILE(sort不选)(3)定义控件的成员变量按

8、照表2,用类向导(Class Wizard)为对话框中的控件对象定义相应的成员变量。表2 控件对象的成员变量控件IDControl IDs变量名称Member Variable Name变量类别Category变量类型Variable TypeIDC_STATIC_FTPm_staFtpControlCStaticIDC_STATIC_NAMEm_staNameControlCStaticIDC_STATIC_PWDm_staPwdControlCStaticIDC_EDIT_FTPm_strFtpValueCStringm_editFtpControlCEditIDC_EDIT_NAMEm_

9、strNameValueCStringm_editNameControlCEditIDC_EDIT_PWDm_strPwdValueCStringm_editPwdControlCEditIDOKm_btnQueryControlCBottonIDC_DOWNLOADm_btnDownloadControlCBottonIDC_UPLOADm_btnUploadControlCBottonIDC_LIST_FILEm_listFileControlCListBox(3)添加成员变量的初始化代码在FtpDlg.cpp文件的OnInitDialog()函数中添加成员变量的初始化代码。对服务器名,登

10、录用户名,登录口令的控件变量赋初值。BOOL CFtpDlg:OnInitDialog(). / 前面是MFC应用程序向导和类向导自动生成的代码/ TODO: Add extra initialization herem_strFtp=_T(); / 初始化服务器域名m_strName=_T(); / 初始化登录用户名m_strPwd=_T(); / 初始化登录口令UpdateData(FALSE); /更新界面return TRUE; / return TRUE unless you set the focus to a control(5)为对话框中的控件对象添加事件响应函数按照表3,用类

11、向导(Class Wizard )为对话框中的控件对象添加事件响应函数。表3 对话框控件的事件响应函数控件类型对象标识 ObjectID消息 Message函数Member functions命令按钮IDOKBN_CLICKEDOnQuery命令按钮IDC_DOWNLOADBN_CLICKEDOnDownload命令按钮IDC_UPLOADBN_CLICKEDOnUpload列表框IDC_LIST_FILELBN_SELCHANGEOnSelchangeListFile(6)为CFtpDlg类添加其它的成员函数,分别用于文件的下载和上传。BOOL CFtpDlg: Download (CStr

12、ing strSName, CString strDName);BOOL CFtpDlg: Upload (CString strSName, CString strDName);(7)手工添加包含语句在CFtpDlg类的FtpDlg.cpp文件中添加对于Afxinet.h的包含命令,来获得对于MFC WinInet类的支持。(8)添加事件函数和成员函数的代码附录:主要功能实现的代码和分析这个程序的类比较少,只需要在CFtpDlg类的FtpDlg.cpp文件中添加事件函数和成员函数的代码。以下按照它们执行的功能分别介绍。1查询并显示FTP服务器的当前目录内容当用户输入了服务器名、登录用户名和口

13、令后,点击查询按钮,会产生BN_CLICKED事件,导致执行对应的函数OnQuery()。代码如下:void CFtpDlg:OnQuery() CInternetSession* pSession; /定义会话对象指针变量CFtpConnection* pConnection; /定义连接对象指针变量CFtpFileFind* pFileFind; /定义文件查询对象指针变量CString strFileName;BOOL bContinue;pConnection=NULL; /初始化pFileFind=NULL;UpdateData(TRUE); / 获得用户的当前输入(服务器名,用户名

14、和口令)while(m_listFile.GetCount()!=0) m_listFile.DeleteString(0); / 清除列表框的内容pSession=new CInternetSession( / 创建Internet会话类对象AfxGetAppName(),1,PRE_CONFIG_INTERNET_ACCESS);try / 试图建立与指定FTP服务器的连接pConnection=pSession-GetFtpConnection(m_strFtp,m_strName,m_strPwd); catch (CInternetException* e) e-Delete();

15、/ 无法建立连接,进行错误处理pConnection=NULL;if (pConnection!=NULL)/ 创建CFtpFileFind对象,向构造函数传递CFtpConnection对象的指针pFileFind=new CFtpFileFind(pConnection);bContinue=pFileFind-FindFile(*); / 查找服务器上当前目录的任意文件if (!bContinue) / 如果一个文件都找不到,结束查找pFileFind-Close();pFileFind=NULL;while (bContinue) / 找到了第一个文件,继续找其它的文件strFileN

16、ame=pFileFind-GetFileName(); / 获得找到的文件的文件名/ 如果找到的是否目录,将目录名放在括弧中if (pFileFind-IsDirectory() strFileName=+strFileName+;/ 将找到的文件或目录名显示在列表框中。m_listFile.AddString(strFileName);bContinue=pFileFind-FindNextFile(); / 查找下一个文件if (pFileFind!=NULL)pFileFind-Close(); / 结束查询pFileFind=NULL;delete pFileFind; / 删除文件

17、查询对象if (pConnection!=NULL)pConnection-Close();delete pConnection; / 删除FTP连接对象delete pSession; / 删除Internet 会话对象 2实现文件下载功能/查询以后,当用户在列表框中选择了一个文件时,执行此函数。void CFtpDlg:OnSelchangeListFile() / 禁用用来输入的文本框控件m_editFtp.EnableWindow(FALSE); /服务器域名输入文本框m_editName.EnableWindow(FALSE); /登录用户名输入文本框 m_editPwd.Enabl

18、eWindow(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);/当用户点击“下载”按钮时,执行此函数void CFtpDlg:OnDownload() /获得当前输入UpdateData(

19、TRUE);int nSel=m_listFile.GetCurSel();CString strSourceName;/获得用户在列表框中的选择nSel=m_listFile.GetCurSel();m_listFile.GetText(nSel,strSourceName);if (strSourceName.GetAt(0)!= )/选择的是文件CString strDestName;CFileDialog dlg(FALSE,*.*); /定义了一个文件对话框对象变量if (dlg.DoModal()=IDOK) /激活文件对话框/获得下载文件在本地机上存储的路径和名称strDestN

20、ame=dlg.GetPathName();/调用函数下载文件if (Download (strSourceName,strDestName)AfxMessageBox(下载成功!,MB_OK|MB_ICONINFORMATION);elseAfxMessageBox(下载失败!,MB_OK|MB_ICONSTOP); else AfxMessageBox(请写入文件名!,MB_OK|MB_ICONSTOP); else /选择的是目录AfxMessageBox(不能下载目录!n请重选!,MB_OK|MB_ICONSTOP);/禁用下载按钮m_btnDownload.EnableWindow(

21、FALSE);/激活查询和上传按钮m_btnUpload.EnableWindow(TRUE);m_btnQuery.EnableWindow(TRUE);/激活用来输入的文本和编辑框控件m_editFtp.EnableWindow(TRUE);m_editName.EnableWindow(TRUE);m_editPwd.EnableWindow(TRUE);m_staFtp.EnableWindow(TRUE);m_staName.EnableWindow(TRUE);m_staPwd.EnableWindow(TRUE);/ Download函数由OnDownload函数调用,执行实际的

22、下载任务BOOL CFtpDlg: Download (CString strSName, CString strDName)CInternetSession* pSession; /定义会话对象变量指针CFtpConnection* pConnection; /定义连接对象变量指针pConnection=NULL;/创建Internet会话对象pSession=new CInternetSession( AfxGetAppName(), 1,PRE_CONFIG_INTERNET_ACCESS);/建立FTP连接pConnection=pSession-GetFtpConnection(m_

23、strFtp,m_strName, m_strPwd);if (pConnection!=NULL)/下载文件if (!pConnection-GetFile(strSName,strDName)/下载文件错误pConnection-Close();delete pConnection;delete pSession;return FALSE;/清除对象if (pConnection!=NULL)pConnection-Close();delete pConnection;delete pSession;return TRUE;3实现文件上传功能/当用户点击“上传”按钮时,执行此函数void

24、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(F

25、ALSE);CString strSourceName;CString strDestName;CFileDialog dlg(TRUE,*.*); /定义文本对话框对象变量if (dlg.DoModal()=IDOK)/获得待上传的本地机文件路径和文件名strSourceName=dlg.GetPathName();strDestName=dlg.GetFileName();/调用Upload函数上传文件if (Upload (strSourceName,strDestName)AfxMessageBox(上传成功!,MB_OK|MB_ICONINFORMATION);elseAfxMess

26、ageBox(上传失败!,MB_OK|MB_ICONSTOP); else /文件选择有错误AfxMessageBox(请选择文件!,MB_OK|MB_ICONSTOP);/激活查询按钮m_btnQuery.EnableWindow(TRUE);/激活用于输入的文本框控件m_editFtp.EnableWindow(TRUE);m_editName.EnableWindow(TRUE);m_editPwd.EnableWindow(TRUE);m_staFtp.EnableWindow(TRUE);m_staName.EnableWindow(TRUE);m_staPwd.EnableWind

27、ow(TRUE);/ Upload函数有事件处理函数OnUpload调用,执行实际的上传任务BOOL CFtpDlg: Upload (CString strSName, CString strDName)CInternetSession* pSession;CFtpConnection* pConnection;pConnection=NULL;/创建Internet会话pSession=new CInternetSession( AfxGetAppName(), 1,PRE_CONFIG_INTERNET_ACCESS);try/建立FTP连接pConnection=pSession-Ge

28、tFtpConnection( m_strFtp,m_strName, m_strPwd);catch (CInternetException* e)/错误处理e-Delete();pConnection=NULL;return FALSE;if (pConnection!=NULL)/上传文件if (!pConnection-PutFile(strSName,strDName)/上传文件错误pConnection-Close();delete pConnection;delete pSession;return FALSE;/清除对象if (pConnection!=NULL)pConnection-Close();delete pConnection;delete pSession;return TRUE;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1