.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;
}
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;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货