Здравствуйте, molinero, Вы писали:
А>> ShowMessage(Format('CMD_LOGIN %s %d', [sClientNo, Length(sClientNo)])); // не очень хорошо тут мессаджи показывать...
M>Такие сообщения я кое где вставляю для проверки результатов... А чем это чревато?
M>Я правильно понимаю, что если отправить два сообщения подряд, к примеру,
M>M>ClientSocket1.Socket.SendBuf(Prefix^,SizeOf(TPrefix));
M>ClientSocket1.Socket.SendBuf(ClientNo,Length(ClientNo));
M>
M>То на приемнике возникнет два события OnClientRead? Или все же одно?
Это вам теорию почитать про ТСР протокол нужно.
Запись в поток, чтение из потока, фрагментация и там и там — вам практически неподвластна,
думайте о потоке байтов а не о пакетах, каждый сетевой уровень может разбивать-собирать
фрагменты по своим правилам, ваш вызов recv не обязательно даст вам столько сколько
запрошено, может и меньше.
TMemoryStream использовать можно, но будет немного затруднительно откусывать обработанную голову
вариант со строками вполне приемлим на небольших (до 4к) посылках, если больше и нужна
хорошая производительность — нужно разрабатывать альтернативные методы.
Например, кольцевой зеркальный, или массив или дерево буферов, но тут усложняется
манипулирование и доступ. Или комбинированный — строка для заголовков и стрим для хвоста.