![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование буфера при ClientRead. [D7, WinXP]
Новичёк © (2004-03-30 17:19:00)Уважаемые Мастера, есть процедура обработки события сокета OnRead:
procedure TForm1.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
Buffer: AnsiString;
begin
Buffer := Client.Socket.ReceiveText;
end;
Вопрос:
Когда необходимо применять
Buffer := Client.Socket.ReceiveText;
а когда
Buffer := Buffer + Client.Socket.ReceiveText;
???
Непонятно...
Digitman (2004-03-31 08:29:00) [1]
> Новичёк
> Странно всё-таки работает буфер клиента сокета
что ж странного ? транспортный протокол-то используется здесь поточный
вот событием OnRead гнездо и извещает тебя, что поток не пуст, и тебе следует как-то отреагировать на сей факт ... ты вправе выбрать из вх.потока все что там есть на этот момент, и так же вправе выбрать ровно столько, сколько ожидаешь (но не более того что есть во вх.потоке на момент обработки события)
ReceiveText выбирает из вх.потока всечто там есть , без разбору
Новичёк (2004-03-30 17:53:00) [2]
> Digitman
Проверил. Вы, как всегда, правы. Странно всё-таки работает буфер клиента сокета.
Digitman (2004-03-30 17:33:00) [3]
> Новичёк
на момент начал выполнения любого из представленных вариантов переменная Buffer у тебя всегда будет = '', ибо она локальная
буфер накопления в дан.случае имеет смысл, если он НЕ локальный
Reindeer Moss Eater (2004-03-30 17:33:00) [4]Вот именно
Новичёк (2004-03-30 17:32:00) [5]
> Reindeer Moss Eater
А вот и нет :-( Даю разные команды на сервер, в одних случаях приходит ответ полностью, в других - частями.
Новичёк (2004-03-30 17:30:00) [6]Думаю, что это зависит от того, какой величины пакеты разрешены в данной подсети. Так?
Digitman (2004-03-30 17:29:00) [7]сам-то как думаешь ?
Reindeer Moss Eater (2004-03-30 17:27:00) [8]Для твоей процедуры это одно и тоже.