У меня есть сервер, отправляющий многомерный массив символов
char buff1[][3] = { {0xff,0xfd,0x18} , {0xff,0xfd,0x1e} , {0xff,0xfd,21} }
В этом случае buff1 несет 3 сообщения (каждый из которых имеет 3 символа). На стороне сервера может быть несколько экземпляров буферов с сообщениями переменной длины (Примечание: каждое сообщение всегда будет иметь 3 символа). а именно
char buff2[][3] = { {0xff,0xfd,0x20},{0xff,0xfd,0x27}}
Как сохранить размер этих буферов на стороне клиента при компиляции кода.
Сервер должен отправить информацию о длине (и любой другой структуре) сообщения с сообщением как часть сообщения.
Легкий способ сделать это - сначала отправить количество байтов в сообщении, а затем байты в сообщении. Часто вы также хотите отправить версию протокола (чтобы вы могли обнаружить несоответствия) и, возможно, даже заголовок идентификатора сообщения (чтобы вы могли отправлять более одного типа сообщений).
Если стремительная производительность не является целью (и вы говорите через сетевой интерфейс, который, как правило, медленнее, чем компьютеры: синтаксический анализ может быть достаточно дешевым, что вам все равно), используя протокол или формат более высокого уровня, иногда хорошая идея (json, xml, что угодно). Это также помогает с проблемами отладки, потому что вместо отладки вашего настраиваемого протокола вы можете отлаживать формат более высокого уровня.
Кроме того, вы можете отправить какой-либо знак, что последовательность завершена. Если есть значение, которое никогда не является допустимым элементом последовательности (например, 0,0,0
), вы можете отправить это, чтобы сказать "больше данных". Или вы можете отправить каждый элемент заголовком, если он является последним элементом, или заголовок может сказать, что этот элемент не существует, а последний элемент был предыдущим.