?? hftpclient.h
字號:
// HFtpClient.h: interface for the HFtpClient class.
//
//////////////////////////////////////////////////////////////////////
//文件名 : HFtpClient.h
//功能 : 對FTP協(xié)議的簡單封裝
//創(chuàng)建 : 2004.4.22
//修改日期 :
//作者 : 韓國靜
//
#if !defined(AFX_HFTPCLIENT_H__98353B25_7122_445A_83B0_2D3CD20AF2B2__INCLUDED_)
#define AFX_HFTPCLIENT_H__98353B25_7122_445A_83B0_2D3CD20AF2B2__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "HTcpSock.h"
/*
1、服務(wù)端在端口21監(jiān)聽控制連接
2、數(shù)據(jù)連接由兩種方法建立:客戶端建立監(jiān)聽PORT給服務(wù)端或用PASV請求服務(wù)端監(jiān)聽
3、命令以“\r\n”為結(jié)束;應(yīng)答以三位數(shù)字開始,若是多行第一行數(shù)字之后跟'-',最后一行以數(shù)字開始。
*/
class HFtpClient
{
int m_RemainLen;
char m_szReturn[512];
UNI_WORD m_wPort; //監(jiān)聽端口
CHTcpSock m_Control; //控制連接
CHTcpSock m_Listener; //數(shù)據(jù)連接監(jiān)聽
int recvLine(char *pLine, int len,UNI_DWORD ns);
//從服務(wù)器接收一個應(yīng)答
UNI_BOOL GetAckString(char *pLine, int len,UNI_DWORD ns);
public:
//文件類型,用于TYPE命令
typedef enum {
TYPE_ASCII = 'A',
TYPE_IMAGE = 'I',
TYPE_TELNET = 'T',
TYPE_EBCDIC = 'E',
}HFTP_TYPE;
//數(shù)據(jù)組織,用于STRU命令
typedef enum{
STRU_FILE = 'F',
STRU_PAGE = 'P',
STRU_RECORD = 'R',
}HFTP_STRU;
//傳輸方式,用于MODE命令
typedef enum{
MODE_STREAM = 'S',
MODE_BLOCK = 'B',
MODE_COMPRESS = 'C',
}HFTP_MODE;
public:
//清除控制連接中的未接收字符
void ReInitializeControl();
//釋放數(shù)據(jù)連接,
UNI_BOOL DestroySock(CHTcpSock *sock,char *recvBuf,int bufLen,UNI_DWORD ns=10000);
CHTcpSock* Stor(char *fileName, char *pAckBuf, int bufLen, UNI_DWORD ns=10000)
{
return GetDataFromListener("STOR ",fileName,pAckBuf,bufLen,ns);
}
CHTcpSock * Stor(UNI_DWORD dwIP,UNI_WORD wPort,char *fileName,char *pAckBuf,int bufLen,UNI_DWORD ns=10000)
{
return GetDataFromIP_Port(dwIP,wPort,"STOR ",fileName,pAckBuf,bufLen,ns);
}
CHTcpSock * List(char *szDir, char *pAckBuf, int bufLen, UNI_DWORD ns=10000)
{
return GetDataFromListener("LIST ",szDir,pAckBuf,bufLen,ns);
}
CHTcpSock * List(UNI_DWORD dwIP,UNI_WORD wPort,char *szDir,char *pAckBuf,int bufLen,UNI_DWORD ns=10000)
{
return GetDataFromIP_Port(dwIP,wPort,"LIST ",szDir,pAckBuf,bufLen,ns);
}
CHTcpSock * Retr(char *fileName,char *pAckBuf,int bufLen,UNI_DWORD ns=10000)
{
return GetDataFromListener("RETR ",fileName,pAckBuf,bufLen,ns);
}
CHTcpSock * Retr(UNI_DWORD dwIP,UNI_WORD wPort,char *fileName,char *pAckBuf,int bufLen,UNI_DWORD ns=10000)
{
return GetDataFromIP_Port(dwIP,wPort,"RETR ",fileName,pAckBuf,bufLen,ns);
}
//不需要數(shù)據(jù)連接的命令
UNI_BOOL Mode(HFTP_MODE mode,char *pAckBuf, int bufLen, UNI_DWORD ns=10000);
UNI_BOOL Stru(HFTP_STRU stru,char *pAckBuf, int bufLen, UNI_DWORD ns=10000);
UNI_BOOL Type(HFTP_TYPE type,char *pAckBuf, int bufLen, UNI_DWORD ns=10000);
UNI_BOOL Pass(char *passWord,char *pAckBuf,int bufLen,UNI_DWORD ns=10000);
UNI_BOOL User(char *userName,char *pAckBuf,int bufLen,UNI_DWORD ns=10000);
UNI_BOOL Acct(char *acct, char *pAckBuf, int bufLen, UNI_DWORD ns=10000);
UNI_BOOL Rmd(char *szDir, char *pAckBuf, int bufLen, UNI_DWORD ns=10000);
UNI_BOOL Pwd(char *pAckBuf, int bufLen, UNI_DWORD ns=10000);
UNI_BOOL CWD(char *szDir,char *pAckBuf,int bufLen,UNI_DWORD ns=10000);
UNI_BOOL Mkd(char *szDir, char *pAckBuf, int bufLen, UNI_DWORD ns=10000);
UNI_BOOL Dele(char *fileName, char *pAckBuf, int bufLen, UNI_DWORD ns=10000);
UNI_BOOL Cdup(char *pAckBuf, int bufLen, UNI_DWORD ns=10000);
UNI_BOOL Abor(char *pAckBuf, int bufLen, UNI_DWORD ns=10000);
UNI_BOOL Quit(char *pAckBuf, int bufLen, UNI_DWORD ns=10000);
UNI_BOOL Rein(char *pAckBuf, int bufLen, UNI_DWORD ns=10000);
UNI_BOOL Port(char *pAckBuf, int bufLen, UNI_DWORD ns=10000);
UNI_DWORD Pasv(UNI_WORD &wPort,char *pAckBuf, int bufLen, UNI_DWORD ns=10000);
//完整的LIST命令操作,分別對應(yīng)用PORT建立連接和用PASV建立連接,可做數(shù)據(jù)傳輸?shù)睦映绦? int Port_ls(char *szDir,char *recvBuf,int bufLen,UNI_DWORD ns=10000);
int Pasv_ls(char *szDir,char *recvBuf,int bufLen,UNI_DWORD ns=10000);
//建立與服務(wù)器的連接
UNI_BOOL Open(UNI_DWORD dwIp, UNI_WORD wPost,char *pAckBuf,int bufLen,UNI_DWORD ns=10000);
UNI_BOOL Open(char *szUrl, UNI_WORD wPost,char *pAckBuf,int bufLen,UNI_DWORD ns=10000)
{
UNI_DWORD dwIp;
hostent *p;
if(p=gethostbyname(szUrl))
{
dwIp=*((DWORD *)p->h_addr_list[0]);
return Open(dwIp,wPost,pAckBuf,bufLen,ns);
}
return UNI_FALSE;
}
//建立監(jiān)聽端口及在Windows下初始化SOCKET動態(tài)鏈接庫;
UNI_BOOL Initialize(UNI_WORD wPort,int nMaxList=1);
void UnInitialize();
//構(gòu)造與析構(gòu)
HFtpClient();
virtual ~HFtpClient();
protected:
//對應(yīng)PORT與PASV兩種方式建立與服務(wù)端的數(shù)據(jù)連接,這兩個是輔助函數(shù)供其它需要數(shù)據(jù)連接的命令調(diào)用
CHTcpSock* GetDataFromIP_Port(UNI_DWORD dwIP,UNI_WORD wPort,char *command,char *agr,char *pAckBuf,int bufLen,UNI_DWORD ns);
CHTcpSock * GetDataFromListener(char *command,char *fileName, char *pAckBuf, int bufLen, UNI_DWORD ns);
};
#endif // !defined(AFX_HFTPCLIENT_H__98353B25_7122_445A_83B0_2D3CD20AF2B2__INCLUDED_)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -