Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.23;
Скачать: CL | DM;

Вниз

Подсчет исходящих байтов   Найти похожие ветки 

 
Beglec ©   (2002-11-26 14:52) [0]

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

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

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

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


 
F1 ©   (2002-11-26 14:56) [1]

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


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


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


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

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


 
Digitman ©   (2002-11-26 15:04) [3]

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

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


 
Beglec ©   (2002-11-26 15:06) [4]

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

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

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


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

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

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


 
F1 ©   (2002-11-26 15:23) [6]

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

:)))


 
Beglec ©   (2002-11-26 15:31) [7]

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

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


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


> Beglec


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


 
F1 ©   (2002-11-26 15:35) [9]

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

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



 
Digitman ©   (2002-11-26 15:38) [10]


> F1


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


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

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

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


 
Digitman ©   (2002-11-26 15:46) [12]

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


 
F1 ©   (2002-11-26 17:24) [13]

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


 
Digitman ©   (2002-11-26 17:47) [14]

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

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


 
F1 ©   (2002-11-26 17:48) [15]

Ok



Страницы: 1 вся ветка

Текущий архив: 2003.01.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
3-72153
Explorer
2003-01-04 08:07
2003.01.23
Выборка данных


3-72087
TTCustomDelphiMaster
2002-12-28 19:44
2003.01.23
Как обмануть DBGrid


7-72567
_toltec
2002-11-14 02:06
2003.01.23
Имя функций в DLl


1-72197
Соловьев
2003-01-14 10:00
2003.01.23
Для чего используют Pred?


14-72535
Igor_thief
2003-01-07 17:14
2003.01.23
Servers