C ++ Socket Recv смешанные сообщения

Здравствуйте, у меня возникли проблемы с сокет-сервером и клиентом.

Проблема в том, что сообщения переплетаются, когда я отправляю их очень быстро. Когда я отправляю их, скажем, 1 сообщение в секунду, все работает хорошо, но когда я их отправляю, 1 сообщение за 40 мс они перепутывают.

вот мой код для получения:

std::string* AteneaClient::readSocket () {

std::string finalString = std::string("");
int size = MSG_SIZE;

bool receiving = true;
int timesBufferInc=0;
while (receiving) {
    std::string temporalString;

    //create an empty buffer
    char* RCV_BUFFER = (char*) malloc (size* sizeof(char));
    for(int i=0;i<size;i++){
        RCV_BUFFER[i]=' ';
    }
    RCV_BUFFER[size-1]='\0';

    int result =  recv(sock,RCV_BUFFER,size-1,NULL);
    if ( result== SOCKET_ERROR ) {
        free(RCV_BUFFER);
        return NULL;
    }
    else if(result<size-1){
        receiving=false;
    }

    temporalString = std::string(RCV_BUFFER);
    finalString+=temporalString;
}
return new std::string(finalString);

}

и вот мой код для отправки:

int sendThread(void* data){
SND_THREAD_DATA* parameters =(SND_THREAD_DATA*)data;
SOCKET* individualSocket = parameters->individualSocket;
std::string * message = parameters->message;

char RCV_BUFFER[MSG_SIZE];
std::string converter;
std::cout <<"(!)Thread: Iniciando sendThread Individual.."<<std::endl;
SOCKET default_socket = *individualSocket;

bool running=true;

while(running){


    int length=message->length();
    char *cstr = new char[length + 1];
    strcpy(cstr, message->c_str());
    if(::send(*individualSocket,cstr,length + 1,NULL)==SOCKET_ERROR){
        logSendError();
        running=false;
    }
    delete cstr;
    Sleep(SLEEPTIME);
}

}

и вот код, когда я настраивал сокет:

void AteneaClient::startUp(){
int iResult = 0;
iResult = WSAStartup(MAKEWORD(2, 2), &WinSockData);
if (iResult != NO_ERROR) {
    wprintf(L"(!)Main:WSAStartup() failed with error: %d\n", iResult);
    return;
}

ADDR.sin_addr.s_addr= inet_addr(IP);
ADDR.sin_family = AF_INET;
ADDR.sin_port = htons(PORT);
sock = socket(AF_INET,SOCK_STREAM,0);
running=true;

}

У кого-нибудь есть идеи, почему сообщения сокетов перепутаны?

Спасибо!

РЕДАКТИРОВАТЬ:

это мой текущий метод получения с улучшениями из комментариев Максима:

std::string* AteneaClient::readSocket () {

int HEADER_SIZE=4;
std::string finalString = std::string("");
int sizeFirstBuffer = HEADER_SIZE*sizeof(char);
char* RCV_BUFFER=(char*) malloc(sizeFirstBuffer+1);

//clean new buffer
for(int i=0;i<HEADER_SIZE;i++){
    RCV_BUFFER[i]=' ';
    }
RCV_BUFFER[sizeFirstBuffer]='\0';



int result =  recv(sock,RCV_BUFFER,sizeFirstBuffer,NULL);
//cout << "The Size to read is:" <<RCV_BUFFER << endl;


//now i create a buffer with that size
int sizeThatIHaveToRead= atoi(RCV_BUFFER);
int sizeSecondBuffer = sizeThatIHaveToRead*sizeof(char);
char* RCV_BUFFER_SECOND=(char*) malloc(sizeSecondBuffer+1);

//clean new buffer
for(int i=0;i<sizeSecondBuffer;i++){
    RCV_BUFFER_SECOND[i]=' ';
    }
RCV_BUFFER_SECOND[sizeSecondBuffer]='\0';



result =  recv(sock,RCV_BUFFER_SECOND,sizeSecondBuffer,NULL);
//cout << "RCV_BUFFER_SECOND:" <<RCV_BUFFER_SECOND << endl;
finalString+=RCV_BUFFER_SECOND;
return new std::string(finalString);

}

Ответы на вопрос(1)

Ваш ответ на вопрос