Пример #1
0
int ClientSocket::Send(const void* lpBuf, int nBufLen, int nFlags = 0/* = 0 */)
{
	SetTimeOut(3000);
	int nSend = CSocket::Send(lpBuf, nBufLen, nFlags);
	KillTimeOut();
	return nSend;
}
Пример #2
0
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;
}
Пример #3
0
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);
}
Пример #4
0
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;
}