You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

194 lines
4.8 KiB
C

1 year ago
#ifndef CLIENT_H_
#define CLIENT_H_
#include <sys/socket.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <sys/stat.h>
#include <netdb.h>
#include <errno.h>
#include <arpa/inet.h>
#include <sys/stat.h>
#include <string>
#include <list>
#define INVALID_SOCKET -1
#define FTP_API int
#define MAX_PATH 260
#define trace printf
#define FTP_PARAM_BASE
#define FTP_DEFAULT_PORT "21" //FTPĬ<50>϶˿ں<CBBF>
#define FTP_DEFAULT_BUFFER 1024*4 //FTP<54><50><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD>Ĭ<EFBFBD>ϴ<EFBFBD>С
#define FTP_DEFAULT_PATH "/mnt/dvs/" //FTPĬ<50>ϱ<EFBFBD><CFB1><EFBFBD>·<EFBFBD><C2B7>
#define FTP_COMMAND_BASE 1000
#define FTP_COMMAND_END FTP_COMMAND_BASE + 30
#define FTP_COMMAND_USERNAME FTP_COMMAND_BASE + 1 //<2F>û<EFBFBD><C3BB><EFBFBD>
#define FTP_COMMAND_PASSWORD FTP_COMMAND_BASE + 2 //<2F><><EFBFBD><EFBFBD>
#define FTP_COMMAND_QUIT FTP_COMMAND_BASE + 3 //<2F>˳<EFBFBD>
#define FTP_COMMAND_CURRENT_PATH FTP_COMMAND_BASE + 4 // <20><>ȡ<EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7>
#define FTP_COMMAND_TYPE_MODE FTP_COMMAND_BASE + 5 // <20>ı<C4B1><E4B4AB>ģʽ
#define FTP_COMMAND_PSAV_MODE FTP_COMMAND_BASE + 6 // <20><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>ģʽ
#define FTP_COMMAND_DIR FTP_COMMAND_BASE + 7 // <20><>ȡ<EFBFBD>ļ<EFBFBD><C4BC>б<EFBFBD>
#define FTP_COMMAND_CHANGE_DIRECTORY FTP_COMMAND_BASE + 8 // <20>ı<EFBFBD>·<EFBFBD><C2B7>
#define FTP_COMMAND_DELETE_FILE FTP_COMMAND_BASE + 9 // ɾ<><C9BE><EFBFBD>ļ<EFBFBD>
#define FTP_COMMAND_DELETE_DIRECTORY FTP_COMMAND_BASE + 10 // ɾ<><C9BE>Ŀ¼/<2F>ļ<EFBFBD><C4BC><EFBFBD>
#define FTP_COMMAND_CREATE_DIRECTORY FTP_COMMAND_BASE + 11 // <20><><EFBFBD><EFBFBD>Ŀ¼/<2F>ļ<EFBFBD><C4BC><EFBFBD>
#define FTP_COMMAND_RENAME_BEGIN FTP_COMMAND_BASE +12 // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define FTP_COMMAND_RENAME_END FTP_COMMAND_BASE + 13 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define FTP_COMMAND_FILE_SIZE FTP_COMMAND_BASE + 14 // <20><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>С
#define FTP_COMMAND_DOWNLOAD_POS FTP_COMMAND_BASE + 15 // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ָ<EFBFBD><D6B8>λ<EFBFBD>ÿ<EFBFBD>ʼ
#define FTP_COMMAND_DOWNLOAD_FILE FTP_COMMAND_BASE + 16 // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
#define FTP_COMMAND_UPLOAD_FILE FTP_COMMAND_BASE + 17 // <20>ϴ<EFBFBD><CFB4>ļ<EFBFBD>
#define FTP_COMMAND_APPEND_FILE FTP_COMMAND_BASE + 18 // ׷<><D7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
/* <20><>½<EFBFBD><C2BD><EFBFBD><EFBFBD>
login2Server
|
inputUserName
|
inputPassWord
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
quit
*/
class CFTPManager
{
public :
enum type {
binary = 0x31,
ascii,
};
CFTPManager(void);
virtual ~CFTPManager(void);
// ! <20><>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FTP_API login2Server(const std::string &serverIP);
// !<21><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>
FTP_API inputUserName(const std::string &userName);
// !<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FTP_API inputPassWord(const std::string &password);
// !<21>˳<EFBFBD>FTP
FTP_API quitServer(void);
// !<21><><EFBFBD> PWD
const std::string PWD();
// !<21><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>ʽ 2<><32><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ascii<69><69>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
FTP_API setTransferMode(type mode);
// !<21><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ģʽ
const std::string Pasv();
// ! <20><><EFBFBD> DIR
const std::string Dir(const std::string &path);
// !<21><><EFBFBD><EFBFBD> <20><> CD
FTP_API CD(const std::string &path);
// <20><>ɾ<EFBFBD><C9BE><EFBFBD>ļ<EFBFBD>
FTP_API DeleteFile(const std::string &strRemoteFile);
// ! ɾ<><C9BE><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>/Ŀ¼
FTP_API DeleteDirectory(const std::string &strRemoteDir);
// ! <20><><EFBFBD><EFBFBD>Ŀ¼/<2F>ļ<EFBFBD><C4BC><EFBFBD>
FTP_API CreateDirectory(const std::string &strRemoteDir);
// !<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FTP_API Rename(const std::string &strRemoteFile, const std::string &strNewFile);
// !<21><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>С
long getFileLength(const std::string &strRemoteFile);
// !<21>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>
void Close(int sock);
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
FTP_API Get(const std::string &strRemoteFile, const std::string &strLocalFile);
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD> ֧<>ֶϵ紫<CFB5>ͷ<EFBFBD>ʽ
FTP_API Put(const std::string &strRemoteFile, const std::string &strLocalFile);
private:
// !<21>ϳɷ<CFB3><C9B7>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const std::string parseCommand(const unsigned int command, const std::string &strParam);
// ! <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FTP_API Connect(int socketfd, const std::string &serverIP, unsigned int nPort);
// ! <20><><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
const std::string serverResponse(int sockfd);
// !<21><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FTP_API getData(int fd, char *strBuf, unsigned long length);
// !<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FTP_API Send(int fd, const std::string &cmd);
// !<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FTP_API Send(int fd, const char *cmd, const size_t len);
// !<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FTP_API createDataLink(int data_fd);
// !<21><><EFBFBD><EFBFBD>PASVģʽ<C4A3><CABD><EFBFBD>ص<EFBFBD><D8B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ȡFTP<54>˿ںź<DABA>FTP<54><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP
FTP_API ParseString(std::list<std::string> strArray, unsigned long & nPort ,std::string & strServerIp);
// <20>򿪱<EFBFBD><F2BFAAB1><EFBFBD><EFBFBD>ļ<EFBFBD>
FILE *createLocalFile(const std::string &strLocalFile);
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
FTP_API downLoad(const std::string &strRemoteFile, const std::string &strLocalFile, const int pos = 0, const unsigned int length = 0);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ftp<74><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
FTP_API parseResponse(const std::string &str);
private:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><D7BD><EFBFBD>
int m_cmdSocket;
// !<21><>ǰ<EFBFBD>û<EFBFBD><C3BB><EFBFBD>
std::string m_strUserName;
// !<21><>ǰ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
std::string m_strPassWord;
// !<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP
std::string m_strServerIP;
// !<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Port
unsigned int m_nServerPort;
// !<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
std::string m_strResponse;
// !<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::string m_commandStr;
// <20><><EFBFBD><EFBFBD>ǰʹ<C7B0>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned int m_nCurrentCommand;
// !<21>Ƿ<EFBFBD><C7B7><EFBFBD>½<EFBFBD><C2BD>־<EFBFBD><D6BE>
bool m_bLogin;
};
#endif