Я новичок в C ++ и пришел к этой проблеме.Я пытаюсь отправить большую строку в сокет.Я видел подобные вопросы в стеке, но не смог найти реальный ответ.Например:
Отправка длинной строки через сокет C ++
Отправка строки с сокетами в C ++ (Winsock TCP / IP)
C ++ отправка строки через сокет
Большинство из них полагаются на факт, что send
будет отправлять все данные за один вызов, или они будут использовать char *
вместоstd::string
.
Вот небольшой код, написанный на C:
int SendAll(SOCKET client_socket, const void *data, int data_size)
{
const char *data_ptr = (const char*) data;
int bytes_sent;
while (data_size > 0)
{
bytes_sent = send(client_socket, data__ptr, data_size, 0);
if (bytes_sent == SOCKET_ERROR)
return -1;
data_ptr += bytes_sent;
data_size -= bytes_sent;
}
return 1;
}
, и теперь представьте, что вместо const void *data
у нас есть std::string data
.Вопрос в том, как я могу переместить указатель на данные типа data_ptr += bytes_sent;
с std::string
?
Один из способов, который я получил, - это получить указатель строки std::stirng
, сохранить его в некотором const char * var
и затем использовать эту переменную таким же образом (var += bytes_sent
).Но так как я новичок в C ++, я не знаю, так ли это на C ++?Это лучшее решение этой проблемы или есть лучшее?спасибо