FTPDownFile.h
上传用户:szjkjd
上传日期:2022-06-27
资源大小:8968k
文件大小:4k
源码类别:

浏览器

开发平台:

Visual C++

  1. /*! @ftpdownfile.h
  2. ********************************************************************************
  3. <PRE>
  4. 模块名         : FTP下载功能头文件
  5. 文件名         : ftpdownfile.h
  6. 相关文件       : ftpdownfile.cpp,
  7. 文件实现功能   : 实现文件在后台通过FTP下载的功能
  8. 作者           : 刘俊
  9. 版本           : 1.0
  10. --------------------------------------------------------------------------------
  11. 备注           : -
  12. --------------------------------------------------------------------------------
  13. 修改记录 : 
  14. 日  期          版本            修改人          修改内容 
  15. 2010/02/08      1.0             刘俊            创建
  16. </PRE>
  17. ********************************************************************************
  18. * 版权所有(c) 2010, 17JGAGO, 保留所有权利
  19. *******************************************************************************/
  20. #include <afx.h> 
  21. #include <stdlib.h>
  22. #include <iostream>
  23. #include <WinSock2.h>
  24. #include <math.h>
  25. #include "shlwapi.h"
  26. // 记录FTP SOCKET接收的信息的字符串数组大小
  27. const int INTRECVMSGSIZE = 502;
  28. #pragma once
  29. #ifndef __FTPDOWNFILE_H__
  30. #define __FTPDOWNFILE_H__
  31. #endif
  32. /*! @CFTPDownFile
  33. ********************************************************************************
  34. <PRE>
  35. 类名称   : CFTPDownFile
  36. 功能     :  实现文件在后台通过FTP下载的功能
  37. 异常类   : 
  38. --------------------------------------------------------------------------------
  39. 备注     : -
  40. 典型用法 : - CFTPDownFile.SOCKETINIT();
  41. CFTPDownFile.ConectFTPCOMMAND();
  42. CFTPDownFile.ConectFTPCOMMAND();
  43. CFTPDownFile.SendUsername();
  44. CFTPDownFile.cFTP.SendPWD();
  45. CFTPDownFile.Startdown(test.txt, c:\test.txt, false);
  46. CFTPDownFile.CloseCommandConect();
  47. --------------------------------------------------------------------------------
  48. 作者     : 刘俊
  49. </PRE>
  50. *******************************************************************************/
  51. class CFTPDownFile
  52. {
  53. public:
  54. /////////////////////// 构造、析构、初始化 ///////////////////////////////////
  55. CFTPDownFile(void);
  56. virtual ~CFTPDownFile(void);
  57. /////////////////////////////// 公用方法 ////////////////////////////////////
  58. // FTP网络信息初始化设定,包括IP,端口,用户名,密码,设置成功返回TRUE,否则返回FALSE
  59. bool SetFTPinfo(const char *pFTP_SERVER_IP, USHORT usPort, const char *pUsername, const char *pPwd);
  60. // FTP网络类SOCKET版本检查初始化工作,成功返回TRUE,否则返回FALSE
  61. bool SOCKETINIT();
  62. // FTP连接命令通道,连接成功,返回TRUE,否则返回FALSE
  63. bool ConectFTPCOMMAND();
  64. // 命令通道关闭
  65. void CloseCommandConect();
  66. // 取得FTP返回的信息
  67. char *GetFTPRecvMsg();
  68. // 发送用户名,正常的话返回值 > 0,否则 = 0;
  69. int SendUsername();
  70. // 发送密码,正常的话返回值 > 0,否则 < 0;
  71. int SendPWD();
  72. // 取得所要下载的文件的大小,,成功返回TRUE,否则返回FALSE
  73. bool GetFTPfilesize();
  74. // 设置下载文件名和下载到本地的文件名,包含路径,第一个参数为FTP文件名,第二个为下载到本地后的文件名
  75. void SetFTPdownfilename(const char*, const char*);
  76. // 记录LOG信息
  77. void WriteLOG(const char*);
  78. // 开始下载文件,下载失败返回0,顺利完成下载返回1,文件已存在返回2,参数错误返回-1
  79. // 第一个参数为FTP文件名,第二个为下载到本地后的文件名,第三个参数为是是续传,FALSE则续传,TRUE则删除原来的文件,重新下载
  80. short Startdown(const char*, const char*, bool bRestart);
  81. // 发送FTP命令,让FTP服务器进入监听模式
  82. void SendFTPListenCommand();
  83. // 发送文件偏移命令,参数为偏移大小
  84. void SendFTPFileSeek(ULONGLONG ull);
  85. // 发送开始接收文件命令
  86. void SendFTPstartsendfile();
  87. // 接收FTP文件,写入本地硬盘
  88. static UINT RevandWritefile(LPVOID pParam);
  89. // 停止下载
  90. void Stopdown();
  91. // 检查文件路径是否存在,不存在的话则创建
  92. void CreatePath(CString strPath);
  93. ///////////////////////////// 属性 ////////////////////////////////////////
  94. // 所要下载FTP文件的大小
  95. double m_dFTPfilesize;
  96. // 记录已经下载文件的大小
  97. double  m_dRecv;
  98. private:
  99. // FTP server IP
  100. char m_chFTPIP[20];
  101. // FTP 端口
  102. USHORT m_usPort;
  103. // FTP登录用户名
  104. char m_chUserName[20];
  105. // FTP登录密码
  106. char m_chFTPPwd[20];
  107. // 命令通道SOCKET
  108. SOCKET m_sockCOMMAND;
  109. // 命令通道sockaddr_in
  110. sockaddr_in m_sinCommand;
  111. // 数据通道SOCKET
  112. SOCKET m_sockDATA;
  113. // 记录FTP返回的信息
  114. char m_chRecvFTPmessage[INTRECVMSGSIZE];
  115. // 要下载的文件名,包含路径
  116. char m_chFTPfilename[1024];
  117. // 下载到本地的文件名,包含路径
  118. char m_chLocalfilename[1024];
  119. // 本地文件操作类
  120.  CFile m_fLocalfile;
  121.  // 继续下载标志,TURE时表示可以继续下载,FALSE表示要停止下载
  122.  bool m_bDown;
  123. };