Я делаю программу сокетов с клиентской и серверной частью. Это работает действительно хорошо, но проблема возникает, когда я пытаюсь поместить два последовательных 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;
}
}
}
recvвсегда будет соответствовать одномуsend, но это предположение неверно. TCP — это поток байтов, а не протокол сообщений. - person Steffen Ullrich   schedule 01.01.2021