




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用VC+编制FTP客户端应用程序FTP协议将使用两条单独的TCP连接,一条专用于发送FTP命令,另一条则专用于传递数据。初始建立连接时,服务器在21号端口上接收来自客户端的命令连接。当需要传送数据时(文件列表、文件数据等),客户端向服务器发出Port命令,并进入监听状态,等待来自服务器的数据连接请求。首先我们利用VC+ 6.0的AppWizard创建一个基于对话框的应用程序,命名为FtpClientDemo。为程序生成五个基于CAsyncSocket的新类,这里列出主要代码。CCommandSocket类的主要代码void CCommandSocket:OnReceive(int nErrorCode)/这个函数使得服务器的应答消息显示在编辑框上 char buffer=new char4096; memset(buffer,0,4096); this-Receive(buffer,1024,0);/接收应答消息 MessageList+=buffer; m_ReturnMessage-SetWindowText(MessageList); delete buffer;CFileSocket类的主要代码void CFileSocket:OnReceive(int nErrorCode)/函数将收到的文件数据写到文件中 if(File= =NULL) File=new CFile(); File-Open(FileName,CFile:modeWrite|CFile:modeCreate); charbuffer=new char4096; memset(buffer,0,4096); this-Receive(buffer,4096,0); ReceiveString=buffer; File-Write(ReceiveString,ReceiveString.GetLength( ); delete buffer;CReceiveSocket类的主要代码void CReceiveSocket:OnReceive(int nErrorCode)/接收服务器传来的文件列表消息 CString ReceiveString,Temp; charbuffer=new char4096; memset(buffer,0,4096); this-Receive(buffer,4096,0); /接收消息 ReceiveString+=buffer; delete buffer;/将文件列表从收到的消息字符串中分离出来,并显示在列表框中 while(!ReceiveString.IsEmpty() int p=ReceiveString.Find(rn);if(p!=-1) Temp=ReceiveString.Left(p); ReceiveString=ReceiveString.Right(ReceiveString.GetLength()-p-2);DisplayMessage-AddString(Temp); CPortSocket类主要代码void CPortSocket:OnAccept(int nErrorCode)/根据不同的标志选择相应的数据连接类,以接受服务器端的数据连接请求 if(Flag= =LISTFILE)/若程序要求对目录进行列表,则采用CReceiveSocket类 DataSocket=new CReceiveSocket(FileList); this-Accept(DataSocket); else if(Flag= =DOWNLOAD)/若程序要求下载文件,则生成CFileSocket类的对象FileSocket=new CFileSocket(FileName);this-Accept(FileSocket); 主对话框类CFtpClient- DemoDlg的主要代码void CFtpClientDemoDlg:OnFileList()/响应“文件列表”按钮、列表目录 CString Temp; if(ControlSocket= =NULL)/连接到FTP服务器ControlSocket=new CCommandSocket(&m_ReturnMessage);ControlSocket-Create();m_Server.GetWindowText(Temp);ControlSocket-Connect(Temp,21);/FTP服务器在21号端口接收连接 m_User.GetWindowText(Temp); Temp=USER +Temp+rn; ControlSocket-Send(Temp,Temp.GetLength(),0);/发User命令,验证用户 m_Pass.GetWindowText(Temp); /m_Pass为“口令”编辑框的对应控制 Temp=PASS +Temp+rn; ControlSocket-Send(Temp,Temp.GetLength(),0);/发Pass命令,校验口令 LisentPort(LISTFILE);/数据连接的对象为目录列表 ControlSocket-Send(LIST rn,7 ,0);/发List命令,要求列表目录void CFtpClientDemoDlg:OnDownLoad( )/下载文件 CString String; LisentPort(DOWNLOAD);/获得要下戴文件的文件名 m_LocalFile.GetWindowText(String);/ m_LocalFile为“文件名”编辑框的对应控制 String=RETR +String+rn; ControlSocket-Send(String,String.GetLength( ),0);/发RETR命令,下载文件void CFtpClientDemoDlg:LisentPort(UINT Flag)/根据要求选择不同的数据连接对象 if(LisentSocket!=NULL)/清空LisentSocket LisentSocket-Close(); delete LisentSocket; LisentSocket=NULL; if(Flag= =LISTFILE)/如果为目录列表数据连接对象 LisentSocket=new CPortSocket(LISTFILE); LisentSocket-SetListBox(&m_FileList);/传列表框到CLisentSocket类中 else if(Flag= =DOWNLOAD)/如果为文件传输数据连接对象 CString String; m_LocalFile.GetWindowText(String); LisentSocket=new CPortSocket(DOWNLOAD); LisentSocket-SetFileName(String);/传文件名到CLisentSocket类中 LisentSocket-Create();/建立Socket并进行监听,等待FTP服务器进行数据连接 LisentSocket-Listen();/取得数据连接Socket的IP地址和监听端口,并把它们作为Port命令的参数 SOCKADDR_IN listing_address, control_address; int addr_size; addr_size = sizeof(listing_address); LisentSocket-GetSockName(SOCKADDR )&listing_address,&addr_size); /取IP地址 ControlSocket-GetSockName(SOCKADDR )&control_address,&addr_size); /取端口unsigned char port = (unsigned char )&(listing_address.sin_port); unsigned char host = (unsigned char )&(control_address.sin_addr); CString strBuffer; strBuffer.Format(PORT %i,%i,%i,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 桥梁巡视养护工公司招聘笔试题库及答案
- 屠宰加工人员岗位实习报告
- 二零二五年度婚庆典礼婚礼现场安保及服务合同
- 2025年度借名购房合同样本详尽分析
- 2025版非煤矿山劳务承包与矿山地质灾害防治合同
- 2025年屋顶绿化草坪工程服务合同
- 二零二五版家居建材门店经营权及产品供应合同
- 2025年农业贷款担保合同范本大全
- 2025年绿色环保项目场地租赁合同
- 二零二五年支付结算安全规范执行合同
- 2025-2030中国智能家居行业市场发展现状及前景趋势与投资发展研究报告
- 2025-2030年中国野生动物保护行业市场需求分析及投资发展前景预测研究报告
- 2025保定市蠡县大曲堤镇社区工作者考试真题
- 2025-2030民办职业教育行业竞争格局分析及投资前景与战略规划研究报告
- 快递柜出租协议书范本
- 煤矿运输提升安全培训课件
- 肾动态弹丸式注射流程
- 油管供货合同协议
- 法兰加工合同协议
- 肠造口及周围并发症的处理和预防
- 工程勘察设计实施要点
评论
0/150
提交评论