读书人

通过socket发送的数据如何在发送的每帧

发布时间: 2013-01-11 11:57:35 作者: rapoo

通过socket发送的数据怎么在发送的每帧数据前都加上统一的头比如:0xe4,0x1b,0x92,0x47
本帖最后由 VisualEleven 于 2013-01-04 21:00:40 编辑 好的,谢谢。
通过recv()函数接收客户端传过来的数据,每次都要从接收的数据中查找同步头


while(……)
{

countReceivd=recv(m_sConnectSocket[gSocketNum], buffRevTemp,m_pNetPara[gSocketNum]->GetRecBuffSize(), 0);

totalReceived += countReceivd; //totalReceived、countReceivd初值都为0

// 找同步头
if(memcmp(netHead, buffRevTemp, headLength) != 0)
{
headIndex = searchNetHead(buffRevTemp, totalReceived,netHead,headLength);
if(headIndex == -1)
{
totalReceived = 0;
continue;
}
else
{
flagGetSize = true;
}
}
else
{
flagGetSize = true;
}
……
}
同步头的定义为:
char netHead[4] = {0xe4,0x1b,0x92,0x47};

请问:
我在客户端发送的时候是将图片读入内存通过send函数来发送图像数据的

send(sockClient, sendBuffer, sizeof(bInfo), 0);//传输bmp图片的信息头
send(sockClient,(char*)pBmpBuf,bInfo.lineByte*bInfo.bmpHeight,0);

怎么才能在发送的每帧数据上都加上同步头0xe4,0x1b,0x92,0x47 呢?
感觉通过
send(sockClient, "0xe4,0x1b,0x92,0x47", strlen("0xe4,0x1b,0x92,0x47")+1, 0);不对,这样就是发送的字符串了? socket send 帧同步,同步头
[解决办法]
我写一段伪代码,你自己改造一下吧:

char SendBuf[1024*1024*5]; //如果开不出来,你就new一下吧。
int nSize = 0;

char netHead[4] = {0xe4,0x1b,0x92,0x47};
memcpy( SendBuf, netHead, 4 );
nSize += 4;
memcpy( SendBuf+nSize, &bInfo, sizeof(bInfo) );
nSize += sizeof(bInfo);
memcpy( SendBuf+nSize, pBmpBuf, bInfo.lineByte*bInfo.bmpHeight );
nSize += bInfo.lineByte*bInfo.bmpHeight;

send(sockClient, SendBuf, nSize, 0);

读书人网 >VC/MFC

热点推荐