Revathy,
Что вам нужно сделать, это сделать пакет фиксированной длины или, по крайней мере, заголовок фиксированной длины, за которым следуют данные переменной длины.
Заголовок должен содержать размер пакета. Таким образом, в функции recv вы всегда читаете байты заголовка, декодируете размер пакета и читаете остальную часть пакета, используя другой вызов recv.
Таким образом, даже когда ваш уровень TCP буферизует любое количество пакетов, вы сможете правильно его прочитать
unsigned char* pBuffer = NULL;
pBuffer = new unsigned char[MESSAGE_HEADER_LENGTH];
// reading header from socket
int nRet = recv(sock,(char*)pBuffer,MESSAGE_HEADER_LENGTH,0);
int nDataLen = //Read the packet length from pBuffer
// reading body from socket
unsigned char* pPacket = NULL;
pPacket= new unsigned char[nDataLen ];
nRet = recv(sock,(char*)pPacket ,nDataLen ,0 );