Como extrair informações de tamanho de uma mensagem e extrair apenas essa quantidade de fluxo de bytes TCP?

Estou tentando enviar uma mensagem pelo soquete em c ++. Eu li muitas perguntas sobre o estouro de pilha relacionadas a isso, mas ainda não consegui descobrir como ele funciona. digamos que estou enviando os seguintes caracteres (M, a, r, t, i, n) para um servidor host local, as pessoas sugerem que você possa usar 4 bytes como o comprimento (ou seja, 32 bits, para que ele possa manipular uma mensagem) a 4 GB de comprimento).

Eu fiz a mesma coisa no meu lado do cliente, mas ainda não sei como descobrir isso no lado do servidor, se quero receber apenas 3 bytes iniciais (M, a, r) ou os últimos 3 bytes (t, i, n) dos meus dados.

Estou postando meu código, por favor me ajude principalmente no lado do servidor, ficarei agradecido se puder escrever algumas linhas relevantes para o código.

           Client side code
std::vector<char> userbuffer(20);
std::cout<<"\nclient:"<<std::endl;
    char* p = userbuffer.data();
    *p = 'M';
            ++p; *p = 'a';
            ++p; *p = 'r';
            ++p; *p = 't';
            ++p; *p = 'i'; 
            ++p; *p = 'n';
            size_t length = strlen(userbuffer.data());
    uint32_t nlength = htonl(length);
            //line containg message length information
           int header_info = send(socketFD, (char*)&nlength, 4, 0); 
           // Data bytes send to the server
    int bytes_sent = send(socketFD, userbuffer.data(), length, 0);

    if(bytes_sent == SOCKET_ERROR){ //some errror handling}





 Server Side Code
 char receivebuffer[MAX_DATA] = { '\0' };
 int bytesReceivedFromClientMsg = 1;
 int length_bytes = 0;
 uint32_t length, nlength;
 //code to check length if we have received whole data length
 while(length_bytes < 4){
 int read = recv(clientSocket, ((char*)&nlength)+length_bytes, (4-length_bytes), 0);
 if (read == -1) { //error handling}
 length_bytes += read;}
// Most painfull section to understand.
// I implemented this code from some ideas on internet 
//but still cant find how its extracting length and what i am reading :(
       while(bytesReceivedFromClientMsg > 0){
    int msgheader = recv(clientSocket,(char*)&nlength,6, 0);
    length = ntohl(nlength);//leng value here is in severel thousand size
    char *receivebuffer = new char(length+1);
        bytesReceivedFromClientMsg = recv(clientSocket, receivebuffer, msgheader, 0);
    receivebuffer[length] = 0 ;
    std::cout<<"msg header is :"<<msgheader<<std::endl;
    std::cout<<"msg data is :"<<bytesReceivedFromClientMsg<<std::endl;

        if(bytesReceivedFromClientMsg == SOCKET_ERROR){//some error handling}

questionAnswers(1)

yourAnswerToTheQuestion