socket 通信一般数据怎么解析

2025-03-13 06:16:16
推荐回答(1个)
回答(1):

就按照返回的数据结构解析即可。
接收数据代码:
while (TRUE)
{
//接收数据
ret = recv(pAccept->m_serverSocket, pAccept->m_pDYFrameInfoBuffer, sizeof(MSG_HEADER)+PACK_SIZE, 0);
if (ret == SOCKET_ERROR)
{
Sleep(40);
continue;
}
PMSG_HEADER pMsg = (PMSG_HEADER)pAccept->m_pDYFrameInfoBuffer;
unsigned int nMsgType = pMsg->nMsgType;
unsigned int nChannel = pMsg->nChannel;
unsigned int nDataSize = pMsg->nDataSize;
unsigned int nFrameNo = pMsg->nReserved;

CString strLog = _T("");
if ((tempFrameNo+1) != nFrameNo )
{
strLog.Format(_T("SocketReceiver接收帧序号:%d不连续-----通道号:%d"), nFrameNo, nChannel);
CCBLogOperator::DefaultInstance().AddLogEventToQueue(_LOG_EVENTNAME_SOCKET_SERVER, strLog, ECB_LOGEVENT_TYPE_INFO, _LOG_MODULENAME_SOCKET);
strLog.Format(_T("第%d帧返回值%d---通道号:%d"),nFrameNo,ret,nChannel);
CCBLogOperator::DefaultInstance().AddLogEventToQueue(_LOG_EVENTNAME_SOCKET_SERVER, strLog, ECB_LOGEVENT_TYPE_INFO, _LOG_MODULENAME_SOCKET);
}

/*strLog.Format(_T("SocketReceiver接收帧序号:%d-----通道号:%d"), nFrameNo, nChannel);
CCBLogOperator::DefaultInstance().AddLogEventToQueue(_LOG_EVENTNAME_SOCKET_SERVER, strLog, ECB_LOGEVENT_TYPE_INFO, _LOG_MODULENAME_SOCKET);*/

switch(nMsgType){
case DATA_MEDIA:
pAccept->AddBufferCache(nChannel,pAccept->m_pDYFrameInfoBuffer, nDataSize);
tempFrameNo = nFrameNo;
ZeroMemory(pAccept->m_pDYFrameInfoBuffer,sizeof(MSG_HEADER) + PACK_SIZE);
break;

}
}