2017-01-19 4 views
0

Программирование сокета TCP: в моем приложении, сторона-получатель использует буфер малого размера, а затем передает данные. Поэтому recv() вызывается несколько раз, пока не будут получены все данные. При каждом вызове recv() используемый буфер копируется в другой большой буфер или частично добавляется к файлу.Обработка порядка TCP-пакетов на стороне приемника на уровне приложения

Мой вопрос здесь в том, должен ли я обрабатывать принятый TCP-пакет в моем коде дополнительно, или TCP обрабатывает его в своем собственном буфере на фоне? Поскольку переданные пакеты TCP поступают на приемник не в правильном порядке.

+3

TCP гарантирует, что данные поступают в том же порядке, в каком они были отправлены. Если вы наблюдаете иначе, в вашем коде есть ошибка. – nos

+0

Общим недоразумением для тех, кто не связан с TCP, является то, что они ожидают * обмена сообщениями * (то есть каждый вызов Send на одном конце будет соответствовать одному вызову Receive на другом конце). Если это то, что, по вашему мнению, вы получили, возможно, вы просто неправильно интерпретируете то, что видите, как «пакеты, выходящие из строя», что, как отмечали другие, не происходит. –

ответ

1

Мой вопрос здесь, я должен обрабатывать полученный TCP «пакет заказа» в моем коде дополнительно

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

Смежные вопросы