FtpLib.h
上传用户:tjfeida
上传日期:2013-03-10
资源大小:1917k
文件大小:5k
源码类别:

Ftp客户端

开发平台:

Visual C++

  1. // Ftp.h: interface for the CFtp class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_FTP_H__5E33C9C5_D4AA_4CAB_972C_E5B142709716__INCLUDED_)
  5. #define AFX_FTP_H__5E33C9C5_D4AA_4CAB_972C_E5B142709716__INCLUDED_
  6. /*********************************************
  7. **该文件是属于WolfFTP工程中的。如果有什么问题
  8. **请联系
  9. **         tablejiang@21cn.com
  10. **或者访问
  11. **         http://wolfftp.51.net
  12. **以得到最新的支持。
  13. *********************************************/
  14. #if _MSC_VER > 1000
  15. #pragma once
  16. #endif // _MSC_VER > 1000
  17. #include "Winsock.h"
  18. #include "share.h"
  19. #include "FileQueue.h"
  20. #include "DeleteFileQueue.h"
  21. #define BUFFER_SIZE 4096
  22. #define RECEIVE_SIZE 4096
  23. #define MSGBOX_TITLE "error"
  24. #define DEFAULT_FTP_PORT 21
  25. #define ERROR_FTP_CODE 999
  26. //sub thread send to main thread .
  27. #define FTP_SERVER_REPLY_MSG WM_USER + 4001
  28. #define FTP_SEND_COMMAND_MSG WM_USER + 4002
  29. #define FTP_TRANSMIT_DATA_MSG WM_USER + 4003
  30. #define FTP_SERVER_DIR_LIST_MSG         WM_USER + 4004
  31. #define FTP_STATUS_MSG WM_USER + 4005
  32. //server type
  33. #define UNIX_SERVER 1
  34. #define WINNT_SERVER 2
  35. #define LINUX_SERVER 3
  36. //main thread send to sub thread .
  37. #define FTP_SERVER_COMMAND_MSG WM_USER + 4502
  38. /*
  39. {
  40. ***** WPARAM *****:
  41. 0 : Quit .
  42. 1 : Send a command to thread . LPARAM is the command string address .
  43. 2 : Refurbish the current ftp directory .
  44. 3 : Get current ftp directory path .
  45. ***** LPARAM *****:
  46. }
  47. */
  48. //this struct mark a thread info.
  49. struct THREADINFO
  50. {
  51. HANDLE thread ; //thread handle
  52. DWORD threadid ; //thread id
  53. THREADINFO* pNext ; //next pointer .
  54. };
  55. //it a ftp file item info .
  56. //this struct can specify a ftp file .
  57. struct FTPITEM
  58. {
  59. char szName[128] ; //ftp file name 
  60. char szSize[16] ; //ftp file size
  61. char szDate[16] ; //ftp file modify date
  62. char szTime[16] ; //ftp file modify time 
  63. char szAttrib[16]; //ftp file attrib
  64. DWORD dwType ; //ftp file type ,is directory or file.
  65. FTPITEM* pNext ; //next pointer .
  66. } ;
  67. //this is the windows handle struct .
  68. //we use this handle change UI status .
  69. struct HWNDINFO
  70. {
  71. HWND hInfoWnd ;
  72. HWND hFtpDirListWnd ;
  73. HWND hWndJobWnd ;
  74. HWND hMultiDownUpWnd ;
  75. HWND hLocalDirListWnd ;
  76. } ;
  77. struct LISTINFO
  78. {
  79. HWND hFtpList ;
  80. HWND hLocalList ;
  81. HWND hCurJobList ;
  82. HWND hBkJobList ;
  83. HWND hGenius ;
  84. } ;
  85. ///////////////////////////////////////////////////////////////////////////////
  86. // Socket init function .
  87. ///////////////////////////////////////////////////////////////////////////////
  88. BOOL InitSocket ( );
  89. BOOL UnInitSocket( ) ;
  90. /***********************************************************
  91. ** @Description:
  92. ** this class encapsulation the ftp understratum function 
  93. **
  94. ** @Note:
  95. **
  96. ** @Return: 
  97. ** @Author: JHM
  98. ** e-mail:  tablejiang@21cn.com
  99. ** Date:  2001 3 26
  100. ***********************************************************/
  101. class CFtpLib  
  102. {
  103. public:
  104. CFtpLib();
  105. virtual ~CFtpLib();
  106. ////////////////////////////////////////////////////////////
  107. //*****************interface function ********************//
  108. ////////////////////////////////////////////////////////////
  109. public:
  110. SOCKET ConnectServer( LPCTSTR lpszHostName );
  111. BOOL CloseFtpConnect( SOCKET hSocket );
  112. UINT SendFtpCommand( LPSTR szCommandBuffer , SOCKET hSocket );
  113. UINT ReadDataCannelToFile( SOCKET hControlSocket , SOCKET hDataSocket , HANDLE hFile  , __int64 iFileSize );
  114. UINT WriteDataCannelFromFile( SOCKET hControlSocket , SOCKET hDataSocket , HANDLE hFile );
  115. UINT ReadDataCannel( SOCKET hControlSocket , SOCKET hDataSocket , char* Buffer );
  116. SOCKET AcceptDataConnect( SOCKET hListenSocket );
  117. SOCKET CreateListenCannel( SOCKET hControlSocket );
  118. void SetStopSign( BOOL bRun );
  119. UINT GetSubItem( int* pos , char* word , int iwordsize , CString* string );
  120. ////////////////////////////////////////////////////////////
  121. //*****************interior function *********************//
  122. ////////////////////////////////////////////////////////////
  123. protected:
  124. int GetTransmitSpeed( DWORD dwStart , DWORD dwEnd ,  __int64 recData );
  125. BOOL AnonymousLogin( SOCKET hSocket );
  126. BOOL UserLogin( SOCKET hSocket , LPSTR szName , LPSTR szPass );
  127. BOOL SendMsgToParentWnd( LPSTR szMsg , BOOL bCommand );
  128. __int64 MyFileSeek( HANDLE hf , __int64 distance , DWORD MoveMethod );
  129. // BOOL SetTransmitFilePos( FTPFILEINFO* pFile , HANDLE hFile , SOCKET hSocket );
  130. UINT GetReplyCode( LPSTR lpszBuffer );
  131. int GetServerReply( SOCKET hSocket );
  132. BOOL IsReadyToRead( SOCKET hSocket );
  133. SOCKET PrepareDataCannel( SOCKET hListenSocket , SOCKET hControlSocket );
  134. SOCKET m_hDataSocket ;
  135. ////////////////////////////////////////////////////////////
  136. //***************** Data *********************************//
  137. ////////////////////////////////////////////////////////////
  138. public:
  139. char m_szFtpBuffer[BUFFER_SIZE] ;
  140. HWNDINFO m_hWndInfo ;
  141. BOOL m_bRun ;
  142. HWND m_hParentWnd ;
  143. };
  144. #endif // !defined(AFX_FTP_H__5E33C9C5_D4AA_4CAB_972C_E5B142709716__INCLUDED_)