Главная страница
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.016 c
1-72370
Валерыч
2003-01-05 03:23
2003.01.23
Взаимодействие компонентов


1-72224
malkolinge
2003-01-13 16:32
2003.01.23
Регистрирую свои редакторы свойств и имею головную боль :)


3-72138
Mic_2000
2003-01-03 10:32
2003.01.23
Вопрос по IBQuery и IBUpdateSQL


3-72143
ZiLot
2003-01-02 13:23
2003.01.23
Простой вопрос


3-72030
бобёр
2003-01-04 18:40
2003.01.23
integer