TCP - это поток байтов.Он ничего не знает о вашей концепции сообщений.
Таким образом, вы должны предоставить необходимую информацию о кадрах сообщений в этом потоке байтов.Обычные способы сделать это включают префикс сообщения с заголовком, который содержит общую длину сообщения, или завершение сообщения символом, который иначе не может появиться в действительном сообщении.
Я говорю о формировании TCP-сообщения здесь:http://www.serverframework.com/asynchronousevents/2010/10/message-framing-a-length-prefixed-packet-echo-server.html хотя он относится к коду C ++, поэтому он может быть бесполезен для вас.
Обычно для потребителя сообщений он немного более производительный, чтобы иметь дело с сообщениями с префиксом длины, и зачастую он немного более производительныйдля производителя сообщений для создания сообщений с разделителями символов.Лично я предпочитаю сообщения с префиксом длины везде, где это возможно.
Если в сообщении с префиксом длины вы сначала отправите x байтов данных, которые являются длиной сообщения, то партнер должен знать, что он всегда должен прочитать по крайней мере xбайт для определения длины, и с этого момента он знает размер полученного сообщения и может читать до тех пор, пока у него не будет столько байтов.
С сообщениями с разделителями символов вы просто продолжаете читать и сканировать все данные, которые выпрочитайте, пока не найдете разделитель сообщения.Затем вы получили целое сообщение и, возможно, больше данных (часть следующего сообщения?) В буфере для обработки после этого.