TCP - это протокол для передачи потока байтов.На уровне TCP не существует границ между данными, отправляемыми различными write
.Фактически, если вы делаете несколько write
или send
вскоре после друг друга, данные этих вызовов часто оказываются вместе в одном сетевом пакете ( алгоритм Нейгла ), и они также считываются вместе наприемники заканчиваются.
Это означает, что не должно иметь значения, если вы пишете частичные чанки, такие как 3\r\n
, за которыми следует 123\r\n
вместо полного чанка 3\r\n123\r\n
.Вы даже можете написать несколько блоков или 1,5 блока и т. Д. В пределах одного write
или send
.
Но учтите также, что всегда есть клиенты, где разработчики не понимают должным образом, как работают сокеты и TCP, и предполагают, что вы send
- это то, что вы recv
, или предполагаете, что они всегда получат полный кусокс одним recv
или имеют схожие неверные предположения.Несмотря на то, что вы можете попытаться справиться с такими испорченными приложениями, вы также можете сознательно попытаться сломать их, чтобы они исправлялись раньше, а не показывали случайные и невоспроизводимые проблемы позже.