Не глядя на ваш код, я могу вспомнить только одну проблему, которую вы можете не заметить,
Возможно, вы упускаете момент, когда TCP является потоковым протоколом. Если вы отправляете данные, вызывая функцию отправки 10 раз от клиента, то необязательно, чтобы вам приходилось вызывать функцию приема 10 раз на стороне получателя. Все данные могут быть получены в 1 прием или 5 или 8 или 12 приемов. Я имею в виду, не пытайтесь смотреть на это в виде пакетов. Вы должны сделать Framing себя, чтобы идентифицировать пакеты.
При отправке 4 пакетов по 25 байт каждый. Всего 100 байт данных.
На принимающей стороне вы можете получать 2 пакета по 50 байт, и вам придется идентифицировать свои пакеты самостоятельно, используя некоторые начальные и конечные маркеры и т. Д. *
Вы также можете получить один пакет из 100 байтов или 10 пакетов по 10 байтов. имейте это в виду.