Как извлечь информацию о длине сообщения и извлечь только столько сообщений из потока байтов TCP?

Я пытаюсь отправить сообщение через сокет в C ++. Я прочитал много вопросов о переполнении стека, связанных с этим, но все еще не мог понять, как это работает. Допустим, я отправляю следующие символы (M, a, r, t, i, n) на локальный хост-сервер. Люди предполагают, что в качестве длины можно использовать 4 байта (т.е. 32 бита, чтобы он мог обрабатывать сообщение до до 4 ГБ длины).

Я сделал то же самое на стороне клиента, но все еще не знаю, как я могу выяснить это на стороне сервера, хочу ли я получать только начальные 3 байта (M, a, r) или последние 3 байта (t, i, n) из моих данных.

Я публикую свой код, пожалуйста, помогите мне в основном на стороне сервера, буду благодарен, если сможете написать несколько строк, имеющих отношение к коду.

           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}

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

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