.h文件typedef struct _tagVODHeader{
    DWORD dwVer;
    DWORD dwCmd;
    DWORD dwLen;
}VODHEADER,* LPVODHEADER;#define VODNETCMD_LOGIN 0x00000001typedef struct _tagVODLogin{
    CHAR szUserName[128];
    CHAR szPassword[128];
}VODLOGIN,* LPVODLOGIN;#define VODNETCMD_LOGIN_RET 0x80000001typedef struct _tagVODLoginRet{
    DWORD dwSuccess;
}VODLOGINRET,* LPVODLOGINRET;#define VODNETCMD_MEDIADATA 0x00000006
#define VODNETCMD_MEDIADATA_RET 0x80000006
typedef struct _tagMediaData{
    CHAR szName[128];
}MEDIADATA,* LPMEDIADATA;
typedef struct _tagMediaDataRet{
    CHAR szFileName[64];
    CHAR szFileExt[8];
    DWORD dwFileLen;
}MEDIADATARET,* LPMEDIADATARET;/////////////////////////////////////////////////////////////////////////////
// CVODClientSocket command targetclass VOD_EXT_CLASS CVODClientSocket 
{
// Attributes
public:
SOCKET m_hClientSocket;
// Operations
public:
CVODClientSocket();
virtual ~CVODClientSocket(); BOOL Initialize();
    BOOL Login(LPCSTR pszName,LPCSTR pszPwd);
    BOOL GetMediaData(LPCSTR pszName,LPCSTR pszFileName);
public:
    BOOL RecvData(LPVOID  pData,UINT nLen);
    BOOL SendData(DWORD dwCmdID,LPVOID pData,UINT nLen );
    BOOL SendRaw(LPVOID  pData,UINT nLen);
// Overrides
public:
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CVODClientSocket)
//}}AFX_VIRTUAL // Generated message map functions
//{{AFX_MSG(CVODClientSocket)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG// Implementation
protected:
};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif 
.cpp文件
BOOL CVODClientSocket::GetMediaData(LPCSTR pszName,LPCSTR pszFileName){
    MEDIADATA data = {0};
    strcpy(data.szName,pszName);
    BOOL bRet = SendData(VODNETCMD_MEDIADATA,
        &data,sizeof(data));
    if (bRet == FALSE)
    {
        return FALSE;
    }
    VODHEADER header = {0};
    bRet = RecvData(&header,sizeof(header));
    if (VODNETCMD_MEDIADATA_RET!=header.dwCmd)
    {
        return FALSE;
    }
    MEDIADATARET dataret = {0};
    bRet = RecvData(&dataret,sizeof(dataret));
    if (dataret.dwFileLen==0)
    {
        return TRUE;
    }
    CString strPathName = pszFileName;
    strPathName = strPathName + dataret.szFileName;
    strPathName = strPathName + dataret.szFileExt;    CFile file;
    file.Open(strPathName,CFile::modeCreate|
        CFile::modeWrite);
    CHAR szBuff[2000] = {0};
    LONG nLeft = dataret.dwFileLen;
    while(nLeft>0){
        int nRecv = 2000;
        if (nLeft<nRecv)
        {
            nRecv = nLeft;
        }
        RecvData(szBuff,nRecv);
        file.Write(szBuff,nRecv);
        nLeft = nLeft - nRecv;
    }
    file.Close();
    return TRUE;
}BOOL CVODClientSocket::RecvData(LPVOID  pData,UINT nLen){
    INT nLeft = nLen;
    LPSTR pTemp = (LPSTR) pData;
    while(nLeft>0){
        int nRev = recv(m_hClientSocket,pTemp,nLeft,0);
        if((nRev==SOCKET_ERROR)||(nRev ==0)) return FALSE;
        pTemp = pTemp + nRev;
        nLeft = nLeft - nRev;
    }
    return TRUE;
}BOOL CVODClientSocket::SendData(DWORD dwCmdID,LPVOID pData,UINT nLen ){
    VODHEADER header = {0};
    header.dwCmd = dwCmdID;
    header.dwLen = nLen;
    if (SendRaw(&header,sizeof(header))!=TRUE)
    {
        return FALSE;
    }
    if (SendRaw(pData,nLen) != TRUE)
    {
        return FALSE;
    }
    return TRUE;
}
BOOL CVODClientSocket::SendRaw(LPVOID  pData,UINT nLen){
    INT nLeft = nLen;
    LPSTR pTemp = (LPSTR) pData;
    while(nLeft>0){
        int nRev = send(m_hClientSocket,pTemp,nLeft,0);
        if(nRev ==0) return FALSE;
        pTemp = pTemp + nRev;
        nLeft = nLeft - nRev;
    }
    return TRUE;
}