Чтобы ответить на ваши вопросы в первую очередь:
С каким типом мне нужно инициализировать буфер
По «типу» я предполагаю, что вам действительно нужно значение, как вчем вы инициализируете буфер.Чтобы ответить - вам не нужно заполнять его какой-то известной ценностью вообще.Возвращаемое значение функции recv
сообщает вам, сколько байтов вы получили.Все в этом количестве является действительными данными, все остальное вы можете рассматривать как мусор и можете использовать оставшееся пространство, например, для завершения строки нулем.Предполагая, что вы передаете только строки, конечно.
как мне затем обработать его (разбить его на массив различных целых чисел, т. Е.)
Вот что делают протоколы и методы сериализациис.В них рассказывается о вещах, таких как одер, в котором передаются данные, как их интерпретировать, а также о том, как преобразовать данные, хранящиеся в вашей программе, в байтовый буфер (аргумент send
), а затем о том, как преобразовать их обратно вполучите те же данные, что и перед преобразованием (чтение из recv
).
Теперь уточним, учитывая ограниченные данные, приведенные в вопросе: если вы не обмениваетесь данными с хостом, который, как вы знаете, использует определенный протокол (HTTP, например) или передает данные в каком-то известном формате (например, JSON) и, следовательно, может использовать какую-то библиотеку, чтобы выполнить эту работу за вас, вы реализуете сериализацию и десериализацию самостоятельно.Короче говоря - вы должны знать, как удаленный конец преобразовал данные, которые он отправил в байтовый буфер, и вы делаете те же операции в обратном порядке.Предполагая, что вы находитесь на той же платформе, что и подключенный хост, для очень быстрого подтверждения концепции вы можете пойти с memcpy
, но дальше этого * я не рекомендую .Как вы поступите, это полностью зависит от вас.Лично я бы порекомендовал изучить тему сериализации данных, начиная с простых примеров и создавая свой путь.Такая тема слишком широка, чтобы объяснить ее даже в минимальной форме в одном ответе.