📄 soc.h
字号:
// 对于多网卡的多播终端,可以通过IP_MULTICAST_IF参数设置进行多播的IP
//
// CUDPSocket类中多播返还固定为false
//
/////////////////////////////////////////////////////////////////////////////
//返回当前socket的连接情况,true为连接,false为未连接
bool GetSocketState();
//返回当前连接的socket的远程主机IP和端口(非组播传输)
int GetLocalIP( CString& strPeerAddress, int &nPeerPort );
//设置向CSocMesWnd发送的socket的消息通知窗体和消息
void SetSocketNotify( HWND hWndMsg, UINT unMsg ){m_hWndMsg = hWndMsg; m_nMsg = unMsg;};
void SetSocketNotify(SOCKET_NOTIFY pFuncMes){m_pFuncMes = pFuncMes;};
//设置接收数据的缓冲区大小
void SetBufferLen( int nLen );
//设置收到socket消息后,向外部发送的附加数据
void SetExtData(void *pData){m_pData = pData;};
//获取socket参数
int GetOption( int nLevel, int nName, char *pcNewValue, int *pnValueLen );
//设置socket参数
int SetOption( int nLevel, int nName, const char *pcNewValue, int nValueLen );
//打开socket,如果pucGroupIP不为空,则Socket方式为组播
int OpenSocket( int nLocalPort, BYTE *pucGroupIP = NULL, bool bRoot = false );
//关闭socket
void CloseSocket();
//获得收到的数据
void GetData( const BYTE ** ppucBuf, int &nLen ){*ppucBuf = m_pucDataBuf; nLen = m_nDataLen;};
//发送数据
int SendData( BYTE *pucIP, int nDesPort, const BYTE *pucSendBuf, int &nLen );
//向加入组的终端发送数据
int SendData( const BYTE *pucSendBuf, int &nLen );
protected:
void *m_pData;
bool m_bUDPOpen;
SOCKET m_socUDP;
//是否组播方式打开
bool m_bGroup;
//组播socket是否打开
bool m_bGSocOpen;
//组播Socket
SOCKET m_socGroup;
//组播的组IP
BYTE m_pucGroupIP[4];
//组播的端口
int m_nGroupPort;
//缓冲区
BYTE *m_pucDataBuf;
//收发的数据的大小
int m_nDataLen;
//当前申请的缓冲区大小
int m_nBufLen;
//发送网络消息的窗体
CSocMesWnd * m_pdlgMes;
//socket事件发送的目的窗体
HWND m_hWndMsg;
//发送的消息
UINT m_nMsg;
//网络消息回调函数
SOCKET_NOTIFY m_pFuncMes;
friend class CSocMesWnd;
};
class CUDPSock5
{
public:
CUDPSock5();
~CUDPSock5();
public:
//返回当前socket的连接情况,true为连接,false为未连接
bool GetSocketState();
//返回代理分配给客户端的端口
int GetProxyAlloPort();
//设置向CSocMesWnd发送的socket的消息通知窗体和消息
void SetSocketNotify( HWND hWndMsg, UINT unMsg ){m_hWndMsg = hWndMsg; m_nMsg = unMsg;};
void SetSocketNotify(SOCKET_NOTIFY pFuncMes){m_pFuncMes = pFuncMes;};
//设置接收数据的缓冲区大小
void SetBufferLen( int nLen );
//设置收到socket消息后,向外部发送的附加数据
void SetExtData(void *pData){m_pData = pData;};
//获取socket参数
int GetOption( int nLevel, int nName, char *pcNewValue, int *pnValueLen );
//设置socket参数
int SetOption( int nLevel, int nName, const char *pcNewValue, int nValueLen );
//打开socket,并链接到远程主机
int OpenSocket( BYTE *pucProxyInterIP, int nProxyPort, int nLocalPort,
BYTE *pucProxyOuterIP = NULL, CString strUser = "", CString strPass = "" );
//关闭socket
void CloseSocket();
//获得收到的数据
void GetData( const BYTE ** ppucBuf, int &nLen ){*ppucBuf = m_pucDataBuf; nLen = m_nDataLen;};
//发送数据
int SendData( BYTE *pucDesIP, int nDesPort, const BYTE *pucSendBuf, int &nLen );
protected:
void *m_pData;
bool m_bOpen;
SOCKET m_socTCPToProxy;
SOCKET m_socUDPData;
//代理主机的IP
BYTE m_pucProxyIP[4];
//代理为主机分配的转发端口
int nPorxyAlloPort;
//缓冲区
BYTE *m_pucDataBuf;
//收发的数据的大小
int m_nDataLen;
//当前申请的缓冲区大小
int m_nBufLen;
//发送网络消息的窗体
CSocMesWnd * m_pdlgMes;
//socket事件发送的目的窗体
HWND m_hWndMsg;
//发送的消息
UINT m_nMsg;
//网络消息回调函数
SOCKET_NOTIFY m_pFuncMes;
friend class CSocMesWnd;
};
class CFtp
{
public:
enum FTP_MODE
{
AUTO = 1,
PORT, //FTP下载方式:port
PASSIVE //FTP下载方式:passive
};
CFtp();
~CFtp();
//设置FTP的消息通知窗体和消息
void SetSocketNotify( HWND hWndMsg, UINT unMsg ){m_hWndMsg = hWndMsg; m_nMsg = unMsg;};
void SetSocketNotify(SOCKET_NOTIFY pFuncMes){m_pFuncMes = pFuncMes;};
//设置收到socket消息后,向外部发送的附加数据
void SetExtData(void *pData){m_pData = pData;};
//设置工作FTP模式:
void SetMode(FTP_MODE eMode){m_eMode = eMode;};
//获取FTP服务器上的文件大小(开始下载之后才有效)
unsigned int GetFileSize(){return m_unFileSize;};
//获取当前下载的数据大小
unsigned int GetDownSize(){return m_unDownSize;};
//连接远程FTP服务器
int Connect(BYTE *pucServerIP, int nServerPort,
CString strUser = "", CString strPass = "");
//关闭FTP连接
void Close();
//获取远程目录下的文件列表
int List();
//获取当前的远程目录
int Pwd();
//进入上一级目录
int CDFather();
//进入子目录
int CDSub(CString strDir);
//下载文件
int DownLoad(CString strFile, CString strSave = "", unsigned int unStart = 0);
//删除文件
int Delete(CString strFile);
//创建目录
int MakeDir(CString strDir);
//获取服务器的帮助信息,如:支持的命令的列表
int Help(CString strParam = "");
//获取当前收到的文件数据(当收到NET_FTPDOWNDATA消息时调用)
void GetData( const BYTE **pucBuf, int &nLen );
CEvent m_evtLogin;
protected:
//处理服务器返回的信息的函数
static void DisposeReplay(WPARAM wParam, LPARAM lParam);
//处理服务器返回的数据的函数
static void DisposeData(WPARAM wParam, LPARAM lParam);
//回复远程服务器的命令
void ReplayFtpServer();
//向远程服务器发送命令
int SendCommand(BYTE *pucSendData, int nLen);
//处理一条回复
void ReplayOneCommand(CString strCmd);
//打开数据TCP端口,准备发送FTP命令
int OpenDataPort();
//接收服务器发送的数据
void ReadServerData(bool bMode);
//发送下载命令,开始下载文件
void StartDownLoad();
//将收到的数据写入文件
int WriteData(const BYTE *pData, int nLen);
protected:
void *m_pData;
//FTP工作模式
FTP_MODE m_eMode;
//socket事件发送的目的窗体
HWND m_hWndMsg;
//发送的消息
UINT m_nMsg;
//网络消息回调函数
SOCKET_NOTIFY m_pFuncMes;
//FTP服务器的IP和端口
BYTE m_pucFtpServerIP[4];
int m_nFtpServerPort;
//登录FTP的用户名和密码
CString m_strUser;
CString m_strPass;
//开始下载的文件位置
unsigned int m_unStartPos;
//下载远程文件时,是否同时将数据写入文件
bool m_bWrite;
//从服务器得到的FTP模式,true,PORT,false,PASSIV
bool m_bMode;
//当前FTP进度标志
//关闭(true则处于未连接FTP服务器状态)
bool m_bClose;
//成功连接远程服务器(true则处于已连接FTP服务器,未登录状态)
bool m_bConnect;
//用户名传输确认(true则FTP服务器已确认用户名)
bool m_bUser;
//密码认证确认(true则FTP服务器已确认密码,登录完成)
bool m_bPass;
//处于请求LIST状态
bool m_bList;
//处于请求DOWNLOAD状态
bool m_bDownload;
//处于正在传送数据的状态,此时m_psocDataSrv或者m_psocDataClt已经打开,此期间不向服务器发送任何FTP命令
bool m_bData;
//收到文件大小后是否启动线程下载文件(signal则开始下载文件前获取文件大小完成)
bool m_bDownFileSize;
//PASSIVE模式下等待服务器端口号回复
bool m_bWaitForPort;
//DATA_PORT模式时,供FTP服务器连接,传输数据的TCP(缓冲区大小0xFFFF)
CTCPServe *m_psocDataSrv;
//PASSIVE模式时,连接FTP服务器,传输数据的TCP
CTCPClient *m_psocDataClt;
//与FTP服务器交互命令的TCP(缓冲区大小1024)
CTCPClient *m_psocCommand;
//下载的文件名称
CString m_strFileDown;
//下载文件保存在本地名称
CString m_strFileSave;
//下载的文件大小
unsigned int m_unFileSize;
//当前总共下载的数据大小
unsigned int m_unDownSize;
//下载的文件
CFile *m_pfilDown;
//保存收到的数据大小的缓冲区
BYTE *m_pDataBuf;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -