Re[5]: ReceiveBuf Delphi7
От: Аноним  
Дата: 01.06.11 11:10
Оценка:
Здравствуйте, 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к) посылках, если больше и нужна
хорошая производительность — нужно разрабатывать альтернативные методы.
Например, кольцевой зеркальный, или массив или дерево буферов, но тут усложняется
манипулирование и доступ. Или комбинированный — строка для заголовков и стрим для хвоста.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.