1,316
社区成员
发帖
与我相关
我的任务
分享
UINT RecvSize = 0;
TMemoryStream * stm = new TMemoryStream;
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket)
{
char *buf = (char *)malloc(Socket->ReceiveLength());
Socket->ReceiveBuf(buf, Socket->ReceiveLength());
RecvSize += Socket->ReceiveLength();
stm->Write(buf, Socket->ReceiveLength());
free(buf);
while(RecvSize > sizeof(Msg_header))
{
Header * pHead = (Header *)stm->Memory;
if(RecvSize >= pHead->bodyLength+sizeof(Msg_header) )
{
//处理数据
/*
例如 Body1 *pBody1 = (Body1 *)(pHead++);
code...
*/
RecvSize = 0;
if(RecvSize > pHead->bodyLength+sizeof(Msg_header) )
{
stm->Seek(0, 0);
stm->Write((char *)stm->Memory + pHead->bodyLength + sizeof(Msg_header),
stm->Size - pHead->bodyLength - sizeof(Msg_header));
stm->SetSize(stm->Size - pHead->bodyLength - sizeof(Msg_header));
RecvSize = stm->Size;
}
else
{
stm->Clear();
}
}
else
{
break;
}
}
}