资源描述:
《用VC++编制FTP客户端应用程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、用VC++编制FTP客户端应用程序 FTP协议将使用两条单独的TCP连接,一条专用于发送FTP命令,另一条则专用于传递数据。初始建立连接时,服务器在21号端口上接收来自客户端的命令连接。当需要传送数据时(文件列表、文件数据等),客户端向服务器发出Port命令,并进入监听状态,等待来自服务器的数据连接请求。 首先我们利用VC++6.0的AppWizard创建一个基于对话框的应用程序,命名为FtpClientDemo。为程序生成五个基于CAsyncSocket的新类,这里列出主要代码。 CCommandSocket类的主要代码 voidCComma
2、ndSocket::OnReceive(intnErrorCode) //这个函数使得服务器的应答消息显示在编辑框上 charbuffer=newchar[4096]; memset(buffer,0,4096); this-〉Receive(buffer,1024,0); //接收应答消息 MessageList+=buffer; m_ReturnMessage-〉SetWindowText(MessageList); deletebuffer; } CFileSocket类的主要代码 voidCFileSocket:
3、:OnReceive(intnErrorCode) //函数将收到的文件数据写到文件中 if(File==NULL) {File=newCFile(); File-〉Open(FileName,CFile::modeWrite
4、CFile::modeCreate); } charbuffer=newchar[4096]; memset(buffer,0,4096); this-〉Receive(buffer,4096,0); ReceiveString=buffer; File-〉Write(ReceiveString,Rec
5、eiveString.GetLength()); deletebuffer; } CReceiveSocket类的主要代码 voidCReceiveSocket::OnReceive(intnErrorCode) //接收服务器传来的文件列表消息 CStringReceiveString,Temp; charbuffer=newchar[4096]; memset(buffer,0,4096); this-〉Receive(buffer,4096,0);//接收消息 ReceiveString+=buffer; delete
6、buffer; //将文件列表从收到的消息字符串中分离出来,并显示在列表框中 while(!ReceiveString.IsEmpty()) {intp=ReceiveString.Find("r"); if(p!=-1) {Temp=ReceiveString.Left(p); ReceiveString=ReceiveString.Right(ReceiveString.GetLength()-p-2); DisplayMessage-〉AddString(Temp); } } } CPortSocket类主要代码 v
7、oidCPortSocket::OnAccept(intnErrorCode) //根据不同的标志选择相应的数据连接类,以接受服务器端的数据连接请求 if(Flag==LISTFILE) //若程序要求对目录进行列表,则采用CReceiveSocket类 {DataSocket=newCReceiveSocket(FileList); this-〉Accept(DataSocket); } elseif(Flag==DOWNLOAD) //若程序要求下载文件,则生成CFileSocket类的对象 {FileSocket=newC
8、FileSocket(FileName); this-〉Accept(FileSocket); } } 主对话框类CFtpClient-DemoDlg的主要代码 voidCFtpClientDemoDlg::OnFileList() //响应“文件列表”按钮、列表目录 {CStringTemp; if(ControlSocket==NULL) //连接到FTP服务器 ControlSocket=newCCommandSocket(&&m_ReturnMessage); ControlSocket-〉Create();
9、m_Server.GetWindowText(Temp); ControlSocket-〉C