int ClientSocket::Send(const void* lpBuf, int nBufLen, int nFlags = 0/* = 0 */) { SetTimeOut(3000); int nSend = CSocket::Send(lpBuf, nBufLen, nFlags); KillTimeOut(); return nSend; }
int MSocket::Receive(CString& str, UINT uTimeOut, int nFlags) { //static char szBuf[5000]; AutoBuf szBuf(5000); memset(szBuf.p, 0, 5000); // If a timeout value was specified, set it if (uTimeOut > 0) SetTimeOut(uTimeOut); // Call base class function int nRet = CSocket::Receive(szBuf.p, 5000, nFlags); // If we previously set a timeout if (uTimeOut > 0) { KillTimeOut(); // If the operation timedout, set a more // natural error message if (nRet == SOCKET_ERROR) { if (GetLastError() == WSAEINTR) SetLastError(WSAETIMEDOUT); } } // Fill in the CString reference str = szBuf.p; return nRet; }
void ClientSocket::OnReceive(int nErrorCode) { // TODO: 在此添加专用代码和/或调用基类 char *pData = NULL; //pData = new char[10240]; //memset(pData, 0, sizeof(char)*10240); External_Mag_Head msgHead; int msgLen = sizeof(External_Mag_Head); UINT leng = 0; CString strDoc; pData = new char[msgLen]; memset(pData, 0, sizeof(char)*msgLen); SetTimeOut(3000); leng = Receive(pData, msgLen, 0); KillTimeOut(); AsyncSelect(FD_READ); memcpy(&msgHead, pData, msgLen); free(pData); pData = new char[msgHead.load_len + 1]; memset(pData, 0, sizeof(char)*msgHead.load_len + 1); SetTimeOut(3000); leng = Receive(pData, msgHead.load_len, 0); KillTimeOut(); AsyncSelect(FD_READ); //char *p_msgBody = (char*)malloc(sizeof(char)*msgHead.load_len); //memset(p_msgBody, 0, sizeof(char)*msgHead.load_len); //memcpy(p_msgBody, pData + msgLen, sizeof(char)*msgHead.load_len); strDoc = StringConvertor::Utf8ToWide(pData); m_xml.SetDoc(strDoc); ParseXml(m_xml); /*DWORD *pParams = new DWORD[2]; pParams[0] = (DWORD)this; pParams[1] = (DWORD)pData; m_hThread = ::CreateThread(NULL, NULL, ParseXml, (LPVOID*)(pParams), NULL, NULL);*/ delete pData; CSocket::OnReceive(nErrorCode); }
int MSocket::Send(LPCTSTR lpszStr, UINT uTimeOut, int nFlags) { // If a timeout value was specified, set it if (uTimeOut > 0) SetTimeOut(uTimeOut); // Call base class function int nRet = CSocket::Send(lpszStr, strlen(lpszStr), nFlags); // If we previously set a timeout if (uTimeOut > 0) { KillTimeOut(); // If the operation timedout, set a more // natural error message if (GetLastError() == WSAEINTR) SetLastError(WSAETIMEDOUT); } return nRet; }