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

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

Подсчет исходящих байтов [D6, WinXP]


Beglec ©   (2002-11-26 14:52:00) 

Есть простой сокет. В программа получает и отправляет сообщения.
Допустим подсчитать входящие байты очень легко.
в событие OnRead
Inc(AllByte,InByte);

То есть в AllByte хранится сумма всего входящих байт.

Внимание вопрос: Как можно посчитать исходящие байты, также в одном месте.
Пытаюсь примерно тоже самое сделать в событии OnWrite чего то не получается.

Спосибо ща ответ


F1   (2002-11-26 17:48:00) [1]

Ok


Digitman   (2002-11-26 17:47:00) [2]

Правильно, вопрос был насчет "одного места") .. ладно хоть - не ж.))

Этим "местом" и будет в дан.случае процедура-обработчик OnWrite()


F1   (2002-11-26 17:24:00) [3]

Ну, ведь такой вопрос был...


Digitman   (2002-11-26 15:46:00) [4]

да хреново ,видать , "просвятил" ... если сразу же не ставишь во главу угла OnWrite(). Это - самое важное здесь.


F1   (2002-11-26 15:44:00) [5]

>Digitman © (26.11.02 15:38)
>Другое дело)

Ну дык твоя школа, ты меня с сокетами и просвятил! ;)


Digitman   (2002-11-26 15:38:00) [6]


> F1


Другое дело)
Только - опять же - если -1, надо ждать OnWrite() и повторять постановку в очередь, иначе данные можно запросто "потерять" при передаче


F1   (2002-11-26 15:35:00) [7]

>Digitman © (26.11.02 15:34)
Согласе, не учел

function MySendBuf(..)
begin
result:=sendbuf(..)
if result>0
MyFuckingCountSendByte:=MyFuckingCountSendByte+Result;
end;


Digitman   (2002-11-26 15:34:00) [8]


> Beglec


А если Result = -1 ? Каковы твои действия ?


Beglec   (2002-11-26 15:31:00) [9]

F1
Фенкс
Так бы сразу ;)

Это пример более подходящий


F1   (2002-11-26 15:23:00) [10]

Ну если SendBuf из разных мест, то
function MySendBuf(..)
begin
result:=sendbuf(..)
MyFuckingCountSendByte:=MyFuckingCountSendByte+Result;
end;

:)))


Digitman   (2002-11-26 15:14:00) [11]

с SendBuf - еще проще : в случае полного/частичного успеха он возвращает кол-во байт, помещенных в очередь на передачу. Просто если результат SendBuf > 0, прибавляй его к сч-ку.

какой тебе пример ? рядом ветка идет с <Dmitry Polskoy>, там и смотри шаблон


Beglec   (2002-11-26 15:06:00) [12]

F1
А теперь представь, что твоя программа отвечат на 250 разных запросов и каждый раз, разный набор данных.
Теперь скажи, в чем рациональность, Делать после каждого send учет байтов?
Ведь это можно сделать всего одной строкой.

Digitman
>>>>>событии OnWrite чего то не получается!!!

Поправка к вопросу
отрявляю при помощи SendBuf.
Желательно немного кода.


Digitman   (2002-11-26 15:04:00) [13]

ставь SendStream() только "в одном месте" - в OnWrite().
до SendStream сохрани Position
сразу же за SendStream снова считывай Position, разницу прибавляй к сч-ку (*)

а для первоначального вызова SendStream зафиксируй где-нить ссылку на Stream и программно вызови процедуру-обработчик OnWrite(). В обработчике же получи сохраненную ссылку на stream и дальше - (*)


Digitman   (2002-11-26 14:57:00) [14]


> также в одном месте


ну так и считай "в одном месте" - в этом самом OnWrite() !

есть метод SendStream, у него есть св-во Position - это и есть размер "переданных" данных


F1   (2002-11-26 14:56:00) [15]

А при отправке(send...) слабо :)))


Наверх

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