Обработка нескольких вызовов recv () и всех возможных сценариев

Я новичок в C и пишу TCP-сервер, и мне было интересно, как обрабатывать recv () от клиента, который будет отправлять команды, на которые сервер будет отвечать к. Ради этого вопроса, давайте просто скажем, что заголовок - это 1-й байт, идентификатор команды - 2-й байт, а длина полезной нагрузки - 3-й байт, за которой следует полезная нагрузка (если есть).

Каков наилучший способ recv () это данные? Я думал вызвать recv (), чтобы прочитать первые 3 байта в буфер, проверить правильность идентификаторов заголовка и команды, затем проверить длину полезной нагрузки и снова вызвать recv () с длиной полезной нагрузки в качестве длины и добавить это в задняя часть вышеупомянутого буфера. Чтение сетевой статьи Биджа (особенно этого раздела здесь: http://beej.us/guide/bgnet/output/html/singlepage/bgnet. html # sonofdataencap ), однако он советует использовать «массив, достаточно большой для двух пакетов [максимальная длина]» для обработки таких ситуаций, как получение некоторых из следующих пакетов.

Как лучше всего справиться с этим типы recv ()? Основной вопрос, но я бы хотел реализовать его эффективно, обрабатывая все случаи, которые могут возникнуть. Заранее спасибо.

5
задан caf 3 December 2010 в 01:04
поделиться