Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос про Сокеты и размер блока [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-метода не есть признак фактического получения данных принимающей стороной, т.е. термин "блок отослан" нельзя трактовать как "блок фактически доставлен"


Наверх

Титульная страница Поиск, карта сайта Написать письмо