Почему событие TClientSocket.OnRead запускается два раза для отправки одного сервера - PullRequest
3 голосов
/ 10 ноября 2010

Итак, у меня есть TClientSocket, который должен получить более 10 КБ данных в одном событии OnRead.Но когда событие инициируется, оно получает только 8 КБ данных, затем событие запускается снова с остальными данными.

Почему это происходит?

Ответы [ 2 ]

12 голосов
/ 10 ноября 2010

Поскольку TCP является потоковым протоколом, а не на основе сообщений. Вы должны получить все, что вам было отправлено, объединить его в один поток данных, а затем проанализировать поток в соответствии с используемым протоколом.

2 голосов
/ 10 ноября 2010

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

...