![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос про Сокеты и размер блока [D7, WinXP]
Iraizor © (2004-07-08 13:15:00)Здравствуйте, уважаемые Мастера !!! Я отсылаю файл SendStream'ом и у меня возник вопрос : можно ли узнать размер блока который был отослан, на OnWrite ? Компоненты Tserversocket & Tclientsocket
Digitman (2004-07-09 08:04:00) [1]
> Ozone © (09.07.04 06:40) [9]
автору нужно организовать индикатор на передающей, а не на принимающей стороне
Ozone (2004-07-09 06:40:00) [2]Как вариант - посылать размер (в виде строки) перед передачей фала.
Digitman (2004-07-08 15:23:00) [3]
> спасибо за подсказку
подсказка-то уже была в [3] .. а это - уже разжевывание прописных истин ObjectPascal, не имеющих никакого отношения конкретно к гнездам
Iraizor (2004-07-08 15:14:00) [4]Огромное спасибо за подсказку! Сейчас же попробую !
Digitman (2004-07-08 14:34:00) [5]
> как перекрыть метод
TMyStream = class(TMemoryStream)
protected
function Read(var Buffer; Count: Longint): Longint; override;
end;
function TMyStream.Read(var Buffer; Count: Longint): Longint;
begin
Result := inherited Read(Buffer, Count);
ShowMessage('Из потока считано ' + IntToStr(Result) + ' байт');
end;
...
ms := TMyStream.Create;
...
mysocket.socket.sendstream(ms);
Reindeer Moss Eater (2004-07-08 14:21:00) [6]Тогда уж проще отказаться от потока и использовать поблочную передачу
Iraizor (2004-07-08 14:19:00) [7]Digitman ©
Простите меня, нуба, но как перекрыть метод и как после выполнения сего действия его использовать ? Я никогда с подобными задачами не сталкивался =(
Digitman (2004-07-08 14:01:00) [8]ах вон оно что !
создай наследника своего наследника TStream, перекрой у него метод Read (он виртуальный) - будешь иметь полный контроль над считыванием компонентом TCustomWinSocket порций данных из твоего стрима
Iraizor (2004-07-08 13:54:00) [9]Мне не нужно узнавать доставлен блок или нет, мне просто нужно узнать сколько байт было отправлено в сокет на этот раз, мне это нужно для ProgressBar
Digitman (2004-07-08 13:30:00) [10]
> можно ли узнать размер блока который был отослан, на OnWrite
> ?
нельзя.
во-первых, потому что OnWrite не возникает до тех пор пока весь стрим не будет помещен в очередь на передачу
ао-вторых, успешное выполнение ЛЮБОГО send-метода не есть признак фактического получения данных принимающей стороной, т.е. термин "блок отослан" нельзя трактовать как "блок фактически доставлен"