




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗质量工作总结范文
- 2024年黑龙江省龙东地区中考语文真题及答案解析
- 沛县生物中考试卷及答案
- 2025年人社局公务员面试高频考点解析与模拟题答案
- UNIT 2 MORALS AND VIRTUES 2026年高考英语第一轮总复习
- 2025年安监精英选拔乡镇安监所招聘面试模拟题及备考指南
- 快递安全教育培训计划课件
- 2025年人力资源管理师面试模拟题
- 2025年化工材料性能与应用领域面试模拟题集
- 《自动控制原理》课程简介与教学大纲
- 2025年工艺美术设计专业毕业答辩试题及答案
- 万头肉牛养殖基地建设项目可行性研究报告
- 小学生相处班会课件
- 2025至2030中国大学科技园行业发展分析及产业运行态势及投资规划深度研究报告
- 成人高考日语真题及答案
- JG/T 335-2011混凝土结构防护用成膜型涂料
- 材料节约措施管理制度
- 2025纪检监察综合业务知识考试题库及答案
- 国家安全知识题库
- T/CCMA 0095-2020非公路自卸车操作使用规程
- JJF(京) 122-2024 测量仪器与智能传感科技成果概念验证实施规范
评论
0/150
提交评论