




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录1 引言12 FTP简介22.1 FTP简介22.2 FTP工作原理23 系统分析及配置33.1 Ftp客户端设计思想33.2服务端配置操作系统IIS安装44 FTP客户端概要设计64.1系统模块64.2系统功能64.3主要数据结构分析64.4程序界面设计75 详细设计及主要代码85.1设置列表控件的风格85.2对话框初始化95.3实现客户端连接到FTP服务器95.4列出FTP服务器目录105.5退出FTP服务器126 测试运行136.1登陆界面136.2列出服务器目录146.3退出服务器147总结15参考文献161 引言FTP是Internet上用来传送文件的协议,它是为了我们能够在Internet上互相转送文件而制定的文件转送标准,规定了Internet上文件如何传送,通过FTP协议,我们可以跟Internet上的FTP服务器进行文件上传或下载。本实验以实现一个简单的FTP客户端为目标,实验目的是:1)熟悉网络应用层的传输协议,增强对FTP协议的了解;2)提高自己的动手能力以及编程能力;3)掌握vc和提高对MFC界面制作能力。本次试验的要求如下:1)要求实现的程序为图形化界面,可以输入FTP服务的相关信息(包括IP地址、用户名与密码),输出交互过程中的FTP命令与响应信息,以及从FTP服务器的根目录获得的文件(或目录)列表。 2)要求遵循RFC959的相关FTP协议规定。只要求实现USER、PASS、PASV、LIST和QUIT命令。点击Connect按钮,实现USER与PASS命令;点击LIST按钮,实现PASV与LIST命令;点击Quit按钮,实现QUIT命令。 3)要求有良好的编程规范与注释信息。 4)要求有详细的说明文档,包括程序的设计思想、工作流程、关键问题等。 5)要求在Windows操作系统环境中,建议使用VisualC+编程工具实现。2 FTP简介2.1 FTP简介FTP(File Transfer Protocol)是文件传输协议,我们可以在服务器中存放大量的共享软件和免费资源,网络用户可以从服务器中下载文件,或者将客户机上的资源上传至服务器。FTP就是用来在客户机和服务器之间实现文件传输的标准协议。它使用客户/服务器模式,客户程序把客户的请求告诉服务器,并将服务器发回的结果显示出来。而服务器端执行真正的工作,比如存储、发送文件等。 如果用户要将一个文件从自己的计算机发送到FTP服务器上,称为FTP的上载(Upload),而更多的情况是用户从服务器上把文件或资源传送到客户机上,称为FTP的下载(Download)。在Internet上存在有许多FTP服务器,它们往往存储了许多允许存取的文件,如:文本文件、图像文件、程序文件、声音文件、电影文件等。2.2 FTP工作原理FTP是TCP/IP的一种具体应用,它工作在OSI模型的第七层,TCP模型的第四层,即应用层,使用TCP传输而不是UDP,这样FTP客户在和服务器建立连接前就要经过一个被广为熟知的三次握手的过程,它带来的意义在于客户与服务器之间的连接是可靠的,而且是面向连接,为数据的传输提供了可靠的保证。首先,FTP并不像HTTP协议那样,只需要一个端口作为连接(HTTP的默认端口是80,FTP的默认端口是21),FTP需要2个端口,一个端口是作为控制连接端口,也就是21这个端口,用于发送指令给服务器以及等待服务器响应;另一个端口是数据传输端口,端口号为20(仅PORT模式),是用来建立数据传输通道的,主要有3个作用:l 从客户向服务器发送一个文件。l 从服务器向客户发送一个文件。l 从服务器向客户发送文件或目录列表。其次,FTP的连接模式有两种,一种方式叫做standard (也就是port方式,主动方式),一种是 passive (也就是pasv,被动方式)。 standard模式 ftp的客户端发送 port 命令到ftp服务器。passive模式ftp的客户端发送 pasv命令到ftp server。图2给出了FTP服务的工作过程。在FTP服务的工作过程中,FTP客户机向服务器请求建立控制连接,FTP客户机与服务器之间建立控制连接;FTP客户机请求登录到服务器,FTP服务器要求客户机提供用户名与密码;当FTP客户机成功登录到服务器后,FTP客户机通过控制连接向服务器发出命令,FTP服务器通过控制连接向客户机返回响应信息;当FTP客户机向服务器发出目录命令后,FTP服务器会通过控制连接返回响应信息,并通过新建立的数据连接返回目录信息。图2 FTP服务器的工作过程3 系统分析及配置Ftp服务的设计与实现主要分为两部分来为客户实现Ftp服务:一是服务器端的配置(windows xp IIS 部件演示),二是客户端(由本人设计开发)这也是本次设计的重点;系统流程为客户实现并解析服务器的配置,以及客户端软件的开发及应用,主要在多个用户间提供资源共享服务。3.1 Ftp客户端设计思想在本次FTP的设计中主要使用WinInet API编程,无需考虑基本的通信协议和底层的数据传输工作,MFC提供的WinInet类是对WinInet API函数封装而来的,它为用户提供了更加方便的编程接口。而在该设计中,使用的类包括 CInternetSession类、CFtpConnection类和CFtpFileFind类,其中,CInternetSession用于创建一个Internet会话; CftpConnection完成文件操作; CftpFileFind负责检索某一个目录下的所有文件和子目录。程序的功能:l 登陆到FTP服务器。l 检索FTP服务器上的目录和文件。3.2服务端配置操作系统IIS安装1.打开控制面板,然后打开其中的“添加/删除程序”。2. 选择添加或删除Windows xp 的组件。并选中“Internet 信息服务(IIS)”,点击“详细信息”按钮后按“下一步”。3. 选中“文件传输协议FTP服务”按确定,系统自动安装相关组建。4IIS服务端配置Ftp服务执行【开始】【程序】【管理工具】【Internet服务器管理器】命令,打开“Internet信息服务”窗口。打开【FTP站点】【默认FTP站点】,右键单击该站点,选择【属性】,对该FTP站点的各属性进行设置,如下图所示(1)FTP地址设置:将自己电脑设为服务器(2)账户设置:(3)主目录设置:设置服务器的共享文件路径为F:4 FTP客户端概要设计4.1系统模块本软件系统只包括三个模块:连接模块、列出服务器目录模块和退出服务器模块。4.2系统功能l 连接模块:实现连接服务器的功能,建立一个Internet会话;l 列出服务器目录模块:列出服务器目录中的信息;l 退出服务器模块:实现退出FTP服务器,并清空服务器目录信息。4.3主要数据结构分析typedef struct FileItemint nItem;/在列表框中的索引BOOL bDir;/是文件夹?CString strFileName;/文件名FILEITEM;class CZjh_FtpClientDlg : public CDialogpublic:CZjh_FtpClientDlg(CWnd* pParent = NULL);/ standard constructorenum IDD = IDD_ZJH_FTPCLIENT_DIALOG ;CListCtrlm_ctrlRemoteFiles;CStringm_strPassword;CStringm_strServer;CStringm_strUserName;CStringm_strMessage;protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV supportprotected:HICON m_hIcon; CInternetSession* m_pInetSession;/会话对象CFtpConnection* m_pFtpConnection;/连接对象 CFtpFileFind* m_pRemoteFinder; /远程查找文件对象CArraym_arrRemoteFiles;/保存远程文件信息void BrowseDir(CString strDir,CListCtrl* pLstCtrl,CFileFind* pFinder,CArray* pFilesArr);/列出目录信息void AddItem(CListCtrl* pLstCtrl,int nIndex,BOOL bDir,CString strText);void SetListCtrlStyle(CListCtrl* pLstCtrl);void AddHeaders(CListCtrl* pLstCtrl); void Quit(CListCtrl* pLstCtrl,CArray* pFilesArr);virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnConnect();afx_msg void OnList();afx_msg void OnQuit();DECLARE_MESSAGE_MAP();4.4程序界面设计利用MFC框架添加一个大的对话框,然后在在该大对话框上面添加一些小的文本框,用于输入服务器的站点,用户名和密码信息;然后再添加按钮控件,用于单击这些按钮后实现相应的功能,在添加各控件时通过选择“属性”对话框来设置各按钮的名字及样式和参数。所有控件添加好后的主要框架如图所示。5 详细设计及主要代码5.1设置列表控件的风格本FTP客户端在成功连接服务器之后,需要接受从服务器返回的数据,这里这是FTP服务器目录的显示风格,具体代码如下:/设置列表控件CListCtrl的风格void CZjh_FtpClientDlg:SetListCtrlStyle(CListCtrl* pLstCtrl)/获得原有风格DWORD dwStyle = GetWindowLong(pLstCtrl-m_hWnd, GWL_STYLE); dwStyle &= (LVS_TYPEMASK);dwStyle &= (LVS_EDITLABELS);/设置新风格 SetWindowLong(pLstCtrl-m_hWnd, GWL_STYLE, dwStyle | LVS_REPORT|LVS_NOLABELWRAP|LVS_SHOWSELALWAYS);/设置扩展风格DWORD styles = LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES;ListView_SetExtendedListViewStyleEx(pLstCtrl-m_hWnd, styles, styles );/给列表控件CListCtrl增加标题头void CZjh_FtpClientDlg:AddHeaders(CListCtrl* pLstCtrl)TCHAR rgtsz210 = _T(文件名), _T(类型);LV_COLUMN lvcolumn;CRect rect;pLstCtrl-GetWindowRect(&rect);for(int i=0;iInsertColumn(i, &lvcolumn);5.2对话框初始化打开该客户端软件后就可以看到,服务器地址文本框、用户名、密码框中已经有数据了。实现该功能是通过向CZjh_FtpClientDlg类添加WM_INITDIALOG响应函数OnInitDialog,具体代码如下:BOOL CZjh_FtpClientDlg:OnInitDialog()CDialog:OnInitDialog();ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);SetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small iconCDialog:SetDlgItemText(IDC_SERVER,);/初始化服务器地址 CDialog:SetDlgItemText(IDC_USER,);/初始化用户名CDialog:SetDlgItemText(IDC_PASSWORD,);/初始化用户密码/初始化列表框控件SetListCtrlStyle(&m_ctrlRemoteFiles);AddHeaders(&m_ctrlRemoteFiles);return TRUE; / return TRUE unless you set the focus to a control5.3实现客户端连接到FTP服务器插入客户端主要框架图后,对各控件进行变量设置,然后就添加客户端界面上“Connect”按钮的消息响应函数,主要的函数有void CZjh_FtpClientDlg:OnConnet(),主要用建立客户端与FTP服务器段的连接。具体代码如下/连接ftp服务器void CZjh_FtpClientDlg:OnConnect() UpdateData(TRUE);/将控件中的数据更新到对应的变量中m_strMessage=m_strMessage+连接服务器:+m_strServer+rn;m_strMessage=m_strMessage+登录用户名:+m_strUserName+rn;UpdateData(false);/新建对话m_pInetSession=new CInternetSession(AfxGetAppName(),1,PRE_CONFIG_INTERNET_ACCESS);try /新建连接对象m_pFtpConnection=m_pInetSession-GetFtpConnection(m_strServer,m_strUserName,m_strPassword); catch(CInternetException *pEx) /获取错误TCHAR szError1024;if(pEx-GetErrorMessage(szError,1024)AfxMessageBox(szError);else AfxMessageBox(There was an exception);pEx-Delete();m_pFtpConnection=NULL;m_strMessage=m_strMessage+m_strUserName+登录失败。+rn;UpdateData(false);return;m_pRemoteFinder = new CFtpFileFind(m_pFtpConnection);m_strMessage=m_strMessage+m_strUserName+登录成功。+rn;UpdateData(false);5.4列出FTP服务器目录List命令用来返回当前服务器目录中的信息,需要使用数据连接传输目录信息。实现该功能是通过向CZjh_FtpClientDlg类添加WM_INITDIALOG响应函数OnList,具体代码如下:void CZjh_FtpClientDlg:OnList()/获得服务器根目录的所有文件并在列表框中显示BrowseDir(,&m_ctrlRemoteFiles,m_pRemoteFinder,&m_arrRemoteFiles);/获得指定目录下的所有文件,并在列表框中显示void CZjh_FtpClientDlg:BrowseDir(CString strDir,CListCtrl* pLstCtrl,CFileFind* pFinder,CArray* pFilesArr)/清空列表框pLstCtrl-DeleteAllItems();pFilesArr-RemoveAll();int nIndex = 0;CString szDir = strDir;if(szDir.Right(1) != )szDir += ;szDir += *.*;/查找目录下的文件BOOL res = pFinder-FindFile(szDir);while(res)res = pFinder-FindNextFile();/是目录if(pFinder-IsDirectory() & !pFinder-IsDots()FILEITEM fileitem;fileitem.nItem = nIndex;fileitem.bDir = TRUE;fileitem.strFileName = pFinder-GetFileName();pFilesArr-Add(fileitem);AddItem(pLstCtrl,nIndex,TRUE,pFinder-GetFileName();/是文件else if(!pFinder-IsDirectory() & !pFinder-IsDots()FILEITEM fileitem;fileitem.nItem = nIndex;fileitem.bDir = FALSE;fileitem.strFileName = pFinder-GetFileName();pFilesArr-Add(fileitem);AddItem(pLstCtrl,nIndex,FALSE,pFinder-GetFileName();nIndex+;/给列表框增加一条记录void CZjh_FtpClientDlg:AddItem(CListCtrl* pLstCtrl,int nIndex,BOOL bDir,CString strText)LV_ITEM lvitem;int iActualItem;for(int iSubItem=0;iSubItemInsertItem(&lvitem);elsepLstCtrl-SetItem(&lvitem);5.5退出FTP服务器ftp客户机向服务器发出QUIT命令,当ftp客户机接收到QUIT命令时,退出服务器,代码如下:/退出服务器,并清空列表框内容void CZjh_FtpClientDlg:OnQuit()m_strMessage=m_strMessage+m_strUserName+退出登录。+rn;GetDlgItem(IDC_MESSAGE)-SetWindowText(m_strMessage); Quit(&m_ctrlRemoteFiles,&m_arrRemoteFiles);void CZjh_FtpClientDlg:Quit(CListCtrl* pL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新生儿采足底血知识考核试题
- 中职班主任管理能力提升培训
- 车险续保培训流程
- 《联想网络营销》课件
- 气象协理员培训实务
- 车资金过桥合同协议
- 特约分销协议书
- 通州学位租赁合同协议
- 《培养自信自爱》课件
- 《神奇数学》课件
- 血液安全管理制度
- 2025年中国南水北调集团有限公司所属水网发展研究有限公司招聘笔试参考题库附带答案详解
- 施工框架协议范本
- 采购合规培训
- 洁净室空调净化系统验证方案(通过BSI和华光审核)
- 上市公司执行企业会计准则案例解析
- 财务岗位招聘笔试题及解答(某大型国企)2025年
- 第六次全国幽门螺杆菌感染处理共识报告-
- 盖房四邻签字协议书范文
- 电影与幸福感学习通超星期末考试答案章节答案2024年
- 《飞向太空的航程》名师课件
评论
0/150
提交评论