2015-10-21 1 views
0

У меня есть сервер, который отправляет файл через соединение сокета моему клиенту. Отправленное сообщение представляет собой структуру, содержащую длину полезной нагрузки и собственно полезную нагрузку.C++ recv socket с меньшим буфером

Проблема заключается в том, что в случае, если полезная нагрузка имеет 270 байт, а мой буфер имеет только 256, когда я вызываю прием снова и добавляю полезную нагрузку строгого, полученного на первом приеме, с тем, что я получил во второй, выходной файл получает некоторые случайные данные между ними.

Например, я посылаю «быстрый коричневый лиса прыгает через ленивую собаку» и буфер заканчивается на «над» он будет записывать в файл: «быстрая коричневая лиса перепрыгивает% & $ & # 57f- 6 $ + ленивая собака "

+1

Вы добавляете с помощью 'strcat()'? ** Не надо! ** read() и recv() не дают строк с нулевым завершением. Вместо этого пусть ваша программа запоминает размеры двух кусков. – wildplasser

+1

Покажите нам код. –

ответ

2

Завершить строку, полученную при первом получении, с символом NULL '\ 0' перед добавлением строки, полученной во втором получении.