Создайте статическую переменную, которая представляет заголовок пакета, эта переменная будет иметь длину пять байтов.Создайте связанное целое число, которое подсчитывает, сколько из этих пяти байтов еще было прочитано.Создайте второе целое число, которое подсчитывает, сколько байтов «содержимого» было прочитано.Обнулите оба целых числа.Создайте связанный указатель char *
, который в конечном итоге будет указывать на содержимое принятого пакета.
По мере поступления данных (например, select
указывает на это), прочитайте пять байтов заголовка.Вы можете получать эти байты постепенно, поэтому вам нужна первая переменная целочисленного числа.Учет байтов заголовков, которые вы получили здесь.
Когда вы закончите получать заголовок, рассмотрите его.Можно ли удовлетворить значения размера (например, не более 2 ^ 30)?Если это так, malloc
буфер этого размера или этого размера плюс заголовок.(Если вы хотите, чтобы заголовок был непрерывным, выделите достаточно места, затем memcpy
поместите его в новый буфер.)
Теперь, когда данные поступают, поместите их в выделенный буфер.Учет полученных байтов во втором целом числе, которое вы создали.Когда вы получите все байты, которые требует заголовок, повторите все вышеперечисленное.