код сервера
uint32_t sizeStr;
string message;
while (1)
{
if((sock = accept(socketR, NULL, NULL))>0)
{
bytes_read = recv(sock, &sizeStr, sizeof(uint32_t),0);
bytes_read = recv(sock,&message, sizeStr,0);
}
}
код клиента
string message = "hello";
uint32_t sizeStr = message.length();
send(sock,&sizeStr,sizeof(uint32_t),0);
send(sock,&message,sizeStr,0);
Почему нельзя просто целиком отправить строку как в случае с uint32_t?Я знаю,что на стороне сервера нужен буфер,на клиентe привести к message.c_str(), но зачем?
Вы как минимум не читали этот сайт - тут столько раз говорилось о том, как быть с такими не-POD объектами, что лично мне уже набило оскомину...
Вашим способом вы передаете не содержимое строк в вашем объекте, а их служебные поля. Строка содержит в себе указатель на выделенную где-то память, в которой содержатся интересующая вас информация. Но вы пытаетесь отправлять/получать просто эти указатели и другие служебные поля...
Получается примерно так - жена говорит собраться в отпуск и в машину в багажник сложить, ну, там, матрас надувной, палатку, мангал и шампуры - ну, в общем, барахло. Вы в багажник кладете бумажки с надписями "Матрас - на антресолях", "Палатка - на балконе" и т.д. Так вот передаете по сети (и, кстати, так же сохраняете в файл - это к тому, что точно по тем же причинам нельзя вот так же - через указатель - просто писать в файл)...
По приезду на место получаете/читаете (с сетью - даже не вы, а другой человек :), получивший вашу посылку) - вынимаете из бумажника бумажки с надписями, где что лежит. Но хуже того, что шкаф теперь совсем другой (если вообще есть - вы же на другом компьютере, в другой программе!), балкон тоже, так что втык от жены - это примерно и есть результат вот такого хранения и попытку раскрыть палатку, которой нет...
Что вам скажет жена/девушка, если вместо подарка вы ей вручите бумажку, на которой написано "красивое золотое кольцо"? :)
Именно поэтому передавать нужно не строку - объект string, а ее содержимое - те самые байты, указатель на которые получается с помощью .c_str(). И сначала длину - чтоб точно знать, сколько именно байт получать. А потом из этих данных восстанавливать нормальную строку-string...
Продвижение своими сайтами как стратегия роста и независимости