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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

FTP客户端课程设计报告书.docx

1、FTP客户端课程设计报告书计算机网络课程设计课题名称 FTP 客户机搭建学院 信息工程学院专业 网络工程班级学号姓名目录和索引一、需求分析 -21、功能需求2、开发环境与工具3、所需要知识二、知识理解 -21、 FTP实现的基本原理( 1)概要( 2)上传和下载( 3)用户 FTP 和匿名 FTP( 4) ASCII 和 Binary(5)Port 和 Passive三、完成进度 -31 、已完成部分2、未完成部分3、还需改善的部分四、 FTP服务工作过程 -4五、详细设计 -51、 CFtpDlg 类的一些函数定义2、 CFtpOperate 的一些函数定义517六、测试结果 -29七、用户

2、手册 -32八、实验总结 -32第 1 页FTP客户端程序一、需求分析1、功能需求( 1)实现一个图形用户界面的FTP客户端,保证文件的安全传输和存储。( 2)提供登录界面,上传下载界面、帮助界面、关于界面。( 3)通过输入服务器地址、用户名和密码,可以实现远程 FTP主机的登录。( 4)提供本地文件和文件夹的上传功能,可对FTP主机文件进行下载和删除文件。( 5)提供对本地目录的读取与返回,能正确列出文件和文件夹,在没有登录服务器前可以作为一个简单的文件查询工具对本地文件进行查询。( 6)帮助页面可以对用户提供使用说明。( 7)关于界面包含设计者的信息。( 9)要求开发出的 FTP客户端符合

3、标准 FTP协议规范,支持 ASCII 传输模式和二进制数据传输模式( 10)FTP 的两种工作模式的选择 Port 模式(主动)和 Passive 模式(被动)2、开发环境与工具(1) 使用的 IDE: 使用 VC+6.0 作为开发环境 IDE(2) 使用的语言: C+( 3)使用的开发包:使用 MFC和 WinInet( 4)开发平台: Windows 73、所需要知识(1) 计算机网络的基本知识( 2)了解 FTP基本实现原理( 2)使用 VC+6.0IDE 进行 MFC程序开发的基本知识( 3)熟悉 WinInet 中属于 FTP部分的操作( 4)熟悉文件或文件夹操作( 5)熟悉控件的

4、操作,如在 List Ctrol 添加图片(浏览文件或文夹的图标)二、知识理解1、FTP实现的基本原理( 1)概要Internet 是一个非常复杂的计算机环境, Internet 上的计算机已有上千万台, 而这些计算机可能运行不同的操作系统,有运行 Unix 的服务器,也有运行 Dos、 Windows 的 PC机等等, 而各种操作系统之间的文件交流问题, 需要建立一个统一的文件传输协议, 这就是所谓的 FTP。基于不同的操作系统有不同的 FTP 应用程序,而所有这些应用程序都遵守同一种协议,这样用户就可以把自己的文件传送给别人,或者从其它的用户环境中获得文件。FTP 也是一个客户机 / 服务

5、器系统。用户通过一个支持 FTP 协议的客户机程序,连接到在远程主机上的 FTP服务器程序。 用户通过客户机程序向服务器程序发出命令, 服务器程序执行用户所发出的命令, 并将执行的结果返回到客户机。 使用 FTP 时必须首先登录, 在远程主机上获得相应的权限以后,方可下载或上传文件。( 2)上传和下载 下载 文件就是从远程主机拷贝文件至自己的计算机上;第 2 页 上传 文件就是将文件从自己的计算机中拷贝至远程主机上( 3)用户 FTP 和匿名 FTP用户 FTP: 种方式为已在 FTP服务器上建立了特定帐号的用户使用,需要合法的用户名和密码才能登录到远程计算机传输文件。匿名 FTP:用户作为

6、“anonymous”登录到 FTP 服务器,不需要有自己的用户名和密码。( 4) ASCII 和 BinaryASCII: 文本传输器使用 ASCII 字符,并由回车键和换行符分开Binary: 二进制不用转换或格式化就可传字符, 二进制模式比文本模式更快, 并且可以传输所有 ASCII 值,所以系统管理员一般将 FTP设置成二进制模式。(5)Port 和 PassivePort 模式 ( 主动 ): FTP 客户端首先和 FTP 服务器的 TCP 21 端口建立连接,通过这个通道发送命令, 客户端需要接收数据的时候在这个通道上发送PORT 命令。 PORT 命令包含了客户端用什么端口接收数

7、据。在传送数据的时候,服务器端通过自己的 TCP 20 端口连接至客户端的指定端口发送数据。 FTP server 必须和客户端建立一个新的连接用来传送数据。Passive模式(被动):Passive模式在建立控制通道的时候和 Standard 模式类似,但建立连接后发送的不是 Port 命令,而是 Pasv 命令。 FTP 服务器收到 Pasv 命令后,随机打开一个高端端口(端口号大于 1024)并且通知客户端在这个端口上传送数据的请求,客户端连接 FTP 服务器此端口,然后 FTP 服务器将通过这个端口进行数据的传送,这个时候 FTP server 不再需要建立一个新的和客户端之间的连接。

8、三、完成进度1、已完成部分( 1)实现一个图形用户界面的FTP客户端,保证文件的安全传输和存储。( 2)提供登录界面,上传下载界面、帮助界面、关于界面( 3)通过输入服务器地址、用户名和密码,可以实现远程 FTP主机的登录。( 4)提供本地文件上传功能,可对FTP 主机文件进行下载和删除文件。( 5)提供对本地目录的读取与返回,能正确列出文件和文件夹,在没有登录服务器前可以作为一个简单的文件查询工具对本地文件进行查询。( 6)帮助页面可以对用户提供使用说明。( 7)关于界面包含设计者的信息(帮助界面和关于界面整合在一起) 。( 9)支持 ASCII 传输模式和二进制数据传输模式,外加自动选择的

9、模式( 10) FTP 的两种工作模式的选择 Port 模式(主动)和 Passive 模式(被动)( 11)提供用户操作的状态信息输出2、未完成部分只提供了本地文件的上传功能,暂时不能提供文件夹的上传功能,由于当初没有使用多线程对服务器端进行操作,若上传或下载的文件过大,会导致界面陷入长时间的不响应中。由于时间问题,就不再进行多线程的扩充,也就不提供文件夹的上传功能。3、还需改善的部分( 1)使用多线程进行操作第 3 页( 2)提供文件夹上传和文件夹下载功能( 3)改进界面,提供更方便的操作( 4)增加上传和下载的队列( 5)同时可连接多个 FTP服务器( 6)改善提示信息( 7)账户。密码

10、等用户资料在本地加密后保存( 8)增加更多的功能,如下载完成后关机等( 9)等四、 FTP服务工作程五、详细设计(1)CFtpDlg 类的一些函数定义BOOL CFtpDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPAR

11、ATOR); pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);SetIcon(m_hIcon, TRUE);SetIcon(m_hIcon, FALSE);m_ctrBinary.SetCheck(1);m_ctrActive.SetCheck(1);m_editPort.SetWindowText(21);bBinary1 = 1; / 使用二进制bPassive1 = 0; / 使用主动myPort = 21;m_imgList.Create(20,20,ILC_COLOR32,0,0); / 创建图像列表m_imgLi

12、st.SetBkColor(RGB(255,255,255); / 文件夹图标hIconFold = :LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_FOLDER);/ 文件图标hIconFile = :LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_FILE); m_imgList.Add(hIconFold);m_imgList.Add(hIconFile);m_ctrlLocalFile.SetImageList(&m_imgList,LVSIL_SMALL); / 关联m_

13、ctrlServerFile.SetImageList(&m_imgList,LVSIL_SMALL); / 关联m_editServer.SetWindowText(ftp:/ );m_editName.SetWindowText();m_editPassword.SetWindowText();m_btnCon.EnableWindow(TRUE);m_btnClo.EnableWindow(FALSE);m_ctrlLocalFile.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); m_ctrlServerFile.Set

14、ExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);m_ctrlLocalFile.InsertColumn(0, 文件名 ,LVCFMT_LEFT,140,0);/ 设置列m_ctrlLocalFile.InsertColumn(1, 文件类型 ,LVCFMT_LEFT,100,1);m_ctrlLocalFile.InsertColumn(2, 修改日期 ,LVCFMT_LEFT,100,2);m_ctrlServerFile.InsertColumn(0, 文件名 ,LVCFMT_LEFT,140,0);/ 设置列m_ctrlServ

15、erFile.InsertColumn(1, 文件类型 ,LVCFMT_LEFT,100,1);m_ctrlServerFile.InsertColumn(2, 修改日期 ,LVCFMT_LEFT,100,2);/ 添加硬盘盘符size_t szAllDriveStrings=:GetLogicalDriveStrings(0,NULL);TCHAR *pDriveStrings=new TCHARszAllDriveStrings+sizeof(_T( ); GetLogicalDriveStrings(szAllDriveStrings,pDriveStrings);size_t szDr

16、iveString=:strlen(pDriveStrings);第 5 页while(szDriveString0)m_ctrlLocal.AddString(pDriveStrings);pDriveStrings+=szDriveString+1;szDriveString=:strlen(pDriveStrings);int index = m_ctrlLocal.FindString(0,c:);m_ctrlLocal.SetCurSel(index);m_strLocPath = c:; / 初始化为 c 盘ListLocFile();cFtpOpr.setEidt(&m_ediM

17、essage);return TRUE; / return TRUE unless you set the focus to a controlvoid CFtpDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);void CFtpDlg:OnPaint()if (IsIconic()CPaintDC dc(this); / device conte

18、xt for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;dc.DrawIcon(x, y, m_hIcon);e

19、lseCDialog:OnPaint();第 6 页HCURSOR CFtpDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;/ 连接服务器void CFtpDlg:OnBtnConnect()/ TODO: Add your control notification handler code herem_editServer.GetWindowText(m_strServer); / 记录 FTP 服务器地址CString strtemp;m_editPort.GetWindowText(strtemp);myPort = :atoi(strtemp

20、); / 获得设置的端口号int i;if (bAnony = 0)/ 不使用匿名m_editName.GetWindowText(m_strName); / 记录 FTP 登陆用户名m_editPassword.GetWindowText(m_strPassword); / 记录 FTP 登陆用户密码i = cFtpOpr.set(m_strServer,m_strName,m_strPassword);else/ 使用匿名CString strNameTemp;m_editName.GetWindowText(strNameTemp); / 匿名登陆的用户名 i = cFtpOpr.set

21、(m_strServer,strNameTemp,);if (i)/ 设置成功,打开连接if (cFtpOpr.OpenConnection()/ 连接成功m_btnClo.EnableWindow(TRUE);m_btnCon.EnableWindow(FALSE);UpdateServerFile();/ 更新服务器的文件显示m_ctrlServer.ResetContent();CString temp;cFtpOpr.GetPath(temp);m_ctrlServer.AddString(LPSTR)(LPCTSTR)temp);m_ctrlServer.SetCurSel(0);m

22、_chkAnony.EnableWindow(FALSE);m_ctrActive.EnableWindow(FALSE);CButton *temp2 =(CButton*)GetDlgItem(IDC_PASSIVE);temp2-EnableWindow(FALSE);m_editPort.EnableWindow(FALSE);else第 7 页/ 连接失败void CFtpDlg:OnBtnClose()/ 关闭连接if (cFtpOpr.CloseConnection()/ 关闭成功m_btnClo.EnableWindow(FALSE);m_btnCon.EnableWindow

23、(TRUE);m_ctrlServerFile.DeleteAllItems();m_ctrlServer.ResetContent();m_ctrActive.EnableWindow(TRUE);CButton *temp2 =(CButton*)GetDlgItem(IDC_PASSIVE);temp2-EnableWindow(TRUE);m_editPort.EnableWindow(TRUE);m_chkAnony.EnableWindow(TRUE);/ 双击本地文件列表控件中的选项void CFtpDlg:OnDblclkListLocalfile(NMHDR* pNMHDR,

24、 LRESULT* pResult)/ TODO: Add your control notification handler code here POSITION p=m_ctrlLocalFile.GetFirstSelectedItemPosition(); if (p = NULL)return;/ 获取刚选取的位置的下标 ( 从 0 开始的 )int index = m_ctrlLocalFile.GetNextSelectedItem(p);/ 获得选中的内容/ 得到第 index 行 . 第 0 列的内容 ( 下标从 0 开始 ) CString FirstColumn=m_ct

25、rlLocalFile.GetItemText(index,0);CString SecondColumn = m_ctrlLocalFile.GetItemText(index,1);if (index = 0) / 返回上层目录int k = m_strLocPath.GetLength() - 1;if (m_strLocPath.Right(2) = :)return;/ 删除当层的项目int ix = m_ctrlLocal.FindString(0,m_strLocPath);第 8 页if (ix != CB_ERR)m_ctrlLocal.DeleteString(ix);fo

26、r (int j = k -1; j = 2;-j)if (m_strLocPath.GetAt(j) = )m_strLocPath = m_strLocPath.Left(j+1);break;ListLocFile();*pResult = 0;return;if (SecondColumn= 文件夹 )CString strTemp = FirstColumn;m_strLocPath += strTemp + ;ListLocFile(); / 更新本地磁盘文件显示else if (SecondColumn= 文件 )/ 点到的是文件,进行上传if (cFtpOpr.ReStatus

27、()=2)cFtpOpr.PutFtpFile(m_strLocPath + FirstColumn,FirstColumn);UpdateServerFile();/ 更新服务器的文件显示*pResult = 0;void CFtpDlg:OnDblclkListServerfile(NMHDR* pNMHDR, LRESULT* pResult)/ TODO: Add your control notification handler code here/ 获取选中的的一个位置POSITION p=m_ctrlServerFile.GetFirstSelectedItemPosition(

28、);if (p = NULL)return;/ 获取刚选取的位置的下标 ( 从 0 开始的 )int index = m_ctrlServerFile.GetNextSelectedItem(p);第 9 页/ 获得选中的内容,得到第 index 行. 第 0 列的内容 ( 下标从 0 开始 ) CString FirstColumn=m_ctrlServerFile.GetItemText(index,0);CString SecondColumn = m_ctrlServerFile.GetItemText(index,1); CStringArray ServName;int nFileNumber=0;if (index = 0) / 返回上层目录if (cFtpOpr.setBackPath(

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

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