Текущий архив: 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.47 MB
Время: 0.008 c