сокеты — C ++ Стоп CAsyncSocket, разделяющий один большой пакет на несколько маленьких пакетов

Я пишу клиент, который подключается к серверу

Иногда сервер отправляет купольные специальные пакеты клиенту размером 30 КБ, но на стороне клиента я получаю эти 30 КБ в нескольких меньших пакетах (1 КБ), поэтому мой OnReceive Колбэк звонит почти 30 раз, пока я не получу полный пакет.

Мне удалось решить эту проблему, поставив Sleep(1000) как раз перед тем CAsyncSocket::Receive и тогда я получаю все 30 КБ в одном пакете, но положить Sleep() это очень плохая идея.

Есть ли какая-либо конфигурация, которую я должен сделать для CAsyncSocket ?

0

Решение

Нет. Нет способа сделать это, потому что TCP-сокеты работают не так. TCP не доставляет пакеты, он доставляет потоки данных.
Может случиться так, что ваш пакет будет доставлен целым, потому что это удобно, или он может разбить пакеты или объединить их с другими пакетами.

Единственный надежный способ сделать это, чтобы получающий конец знал, сколько байтов ему нужно, и продолжал читать, пока не получит столько. Это может означать, например, отправку длины пакета перед каждым пакетом.

3

Другие решения

Других решений пока нет …