设为首页 加入收藏

TOP

3.3.7 具体实现(3)
2013-10-07 15:55:15 来源: 作者: 【 】 浏览:98
Tags:3.3.7 具体 实现

3.3.7  具体实现(3)

2. 定义CFtp类

CFtp类是用户自定义实现FTP功能和原理的非常重要的类。在这里,用户将学习到怎样在Visual C++(www.cppentry.com) 2010环境中定义和封装CFtp类的方法。

(1) 定义头文件Ftp.h,具体代码如下:

  1. class CFtp                                          //定义CFtp类    
  2. {    
  3. public:    
  4. CString ipaddr, name, password;             //IP地址、用户名、密码    
  5. int port;                               //端口号码    
  6. BOOL FTPConnect(CString severhost, int port);   //连接FTP服务器    
  7. CSocket *m_clientsocket;                        //套接字对象    
  8. CArchive *archive;                          //串行化对象    
  9. CSocketFile *socketfile;                    //套接字文件对象    
  10. private:    
  11. CString Recv();                             //接收命令消息    
  12. void Send(CString st);                      //发送命令消息    
  13. void UpdataFile(CString str);           //上传文件    
  14. void DownLoadFile(CString str1);            //下载文件    
  15. void GetFileStatu(char ch);                 //获取文件属性     
  16. }    

从上述CFtp类声明代码中可以看到FTP编程(www.cppentry.com)相关的数据和实现方法。

(2) 根据FTP基本功能介绍每个函数。首先,客户端应该连接服务器,登录方式为匿名。函数FTPConnect()的实现代码如下:

  1. BOOL CFtp::FTPConnect(CString severhost, int port)    
  2. {     
  3. CSocket *m_clientsocket = new CSocket();         //构造连接套接字对象    
  4. m_clientsocket->Create(21,   
  5. SOCK_STREAM, FD_READ|FD_WRITE, NULL);  //创建流式套接字    
  6. if(!m_clientsocket)                 //判断套接字对象创建是否成功    
  7. { MessageBox("套接字创建失败!"); return false; } //创建m_clientsocket失败  
  8. if(!(m_clientsocket->Connect((atoi)severhost, port)))     
  9. return false;   //连接FTP服务器    
  10. else    
  11. { return true;} //连接成功将返回true    
  12. }   

客户端连接FTP服务器,成功则返回True,否则返回False。

(3) 如果连接成功,则需要向服务器发送命令以初始化服务器和获取服务器文件列表。函数Send()的实现代码如下:

  1. void CFtp::Send(CString charstring)     // Send()函数发送信息到服务器    
  2. {   
  3. CSocketFile *socketfile; //定义对象指针    
  4. socketfile =   
  5. new CSocketFile(m_clientsocket); //关联对象m_clientsocket是创建的套接字    
  6. archive = new CArchive(&m_sockfile,   
  7. CArchive::load|CArchive::store); //创建对象archive的实例并指定属性    
  8. charstring = "USER" + lymlrl + "PASS" + 123456"; //构造字符串charstring    
  9. archive.WriteString(" " + "\r\n");    //向服务器发送空字符串进行初始化      
  10. try {       
  11. archive->WriteString(charstring   
  12. + "\r\n"); //调用CArchive类的WriteString发送命令    
  13. archive->Flush();              //强制写入命令到服务器    
  14. }    
  15. Catch(CException e) //处理被抛出的异常     
  16. {    
  17. MessageBox("发送关闭命令失败!");      
  18. }    
  19. }   

(4) 当命令发送后,服务器会返回客户端请求的数据。函数Recv()的实现代码如下:
  1. //Recv()函数接收服务器返回的数据    
  2. CString CFtp::Recv()    
  3. {    
  4. CString recvstr = " ";    //初始化字符串recvstr为空    
  5. if(archive->ReadString(recvstr))      //接收返回信息并放到recvstr变量    
  6. {    
  7. if(recvstr == " ") MessageBox("接收数据为空");  //如果接收的数据为空则提示  
  8.     
  9. {   
  10. MessageBox("接收数据成功");    
  11. return recvstr; //返回接收到的数据   
  12. }  
  13. }    
  14. else     
  15. {    
  16. MessageBox("接收数据失败");  //提示接收数据失败    
  17. }   
  18. }   

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.3.7 具体实现(2) 下一篇3.3.7 具体实现(4)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++中智能指针的性能 (2025-12-25 03:49:29)
·如何用智能指针实现c (2025-12-25 03:49:27)
·如何在 C 语言中管理 (2025-12-25 03:20:14)
·C语言和内存管理有什 (2025-12-25 03:20:11)
·为什么C语言从不被淘 (2025-12-25 03:20:08)