Как отправить несколько бафов в сокеты?

Я делаю программу сокетов с клиентской и серверной частью. Это работает действительно хорошо, но проблема возникает, когда я пытаюсь поместить два последовательных send() и в другой части два recv(). Когда я отправляю первое сообщение, оно работает нормально, но когда я отправляю второе сообщение, часть, которая имеет функцию recv (клиент), отстает и даже не получает сообщение. Я не знаю, почему это происходит, поэтому я был бы очень рад любой помощи. Сокеты TCP.

Сервер

            std::cout << "Conectado\n";
            std::cout << "Press 1 to delete a directory\n";
            std::cout << "Press 2 to create a directory\n";
            char msg[256] = "";
            std::cin.getline(msg, sizeof(msg));
            send(newConnection, msg, sizeof(msg), NULL);
            if (msg[0] == '1') {
                //this works well
            }
            else if (msg[0] == '2') {
                std::cout << "Folder name \n";
                std::cin.getline(msg, sizeof(msg));
                send(newConnection, msg, sizeof(msg), NULL);
                std::cout << "Rute name \n";
                std::cin.getline(msg, sizeof(msg));
                send(newConnection, msg, sizeof(msg), NULL);
            }
        }
    }

Клиент


            std::cout << "Soy cliente\n";
            char msg[256] = "";
            recv(Connection, msg, sizeof(msg), NULL);
            std::cout << msg << std::endl;
            //borrar directorios
            if (msg[0] == '1') { 
                //this is ok
            }
            else if (msg[0] == '2') {
                recv(Connection, msg, sizeof(msg), NULL);
                std::string folder = msg;
                std::cout << folder << std::endl;
                recv(Connection, msg, sizeof(msg), NULL);
                std::string rute = msg;
                std::cout << rute << std::endl;
            }
        }
    }

person Daniel Mañogil Munuera    schedule 01.01.2021    source источник
comment
Отвечает ли это на ваш вопрос? отправка нескольких сообщений send/recv в сокет. Короче говоря: вы предполагаете, что один recv всегда будет соответствовать одному send, но это предположение неверно. TCP — это поток байтов, а не протокол сообщений.   -  person Steffen Ullrich    schedule 01.01.2021