Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RASGetLinkStatistics, не понял... 
:(
    Опции темы
bems
Дата 3.8.2006, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Добрый день. У меня такая проблема. Я пытаюсь пощитать количество байт, переданных и принятых моим модемом за секунду. Делаю так:
Код

stats.dwSize:=SizeOf(stats);
        if RasGetLinkStatistics(EntryHandle,SubEntry,@stats)=0
           then begin
                UsedBps:=round(((stats.dwBytesXmited+stats.dwBytesRcved-BytesIn-BytesOut)*8)/
                               ((stats.dwConectionDuration-time)/1000));
                time:=stats.dwConectionDuration;
                BytesIn:=stats.dwBytesRcved;
                BytesOut:=stats.dwBytesXmited;
                writeln(UsedBps);
                end;

И это все в таймере с интервалом 1с.


(stats.dwBytesXmited+stats.dwBytesRcved-BytesIn-BytesOut)*8 должно давать количество бит за интервал
((stats.dwConectionDuration-time)/1000 должно быть длиной интервала в секундах, то есть близко к 1.

Проблема в том, что иногда значение UsedBps становиться несколько большим, чем stats.dwBps

Или я считать не умею, или не правильно понимаю значения, которыми заполняет структуру функция
RasGetLinkStatistics.
В любом случае прошу ткнуть меня носом. Спасибо.


--------------------
Обижено школьников: 8
PM MAIL   Вверх
dumb
Дата 3.8.2006, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 5
Всего: 158



брр.. непонятно в чем непонятки. smile
ты же считаешь мгновенное(в течение последней секунды) значение bps, а dwBps считается с момента установления линка.
PM MAIL   Вверх
bems
Дата 3.8.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Цитата(dumb @  3.8.2006,  16:08 Найти цитируемый пост)
dwBps считается с момента установления линка.
Насколько я знаю оно вообще не считается. До него договариваются железяки в процессе дозвона. И поэтому (как мне кажеться), за секунду не можт быть больше чем это значение. 

Иначе почему dwBps не меняется в процессе всего соединения?



--------------------
Обижено школьников: 8
PM MAIL   Вверх
dumb
Дата 3.8.2006, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 5
Всего: 158



пардон, доку прочитал неверно. smile
тогда тут может быть только одна причина - сжатие. передаешь мег текста, протокол жмет до 10 кил - получаешь превышение установленной при хэндшейке величины bps. кстати, точно уже не помню, но вроде бывает(в зависимости от настроек), что после ретрейнов устанавливается скорость выше, чем была при установлении соединения.
PM MAIL   Вверх
mai62
Дата 4.8.2006, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 27.2.2006

Репутация: 2
Всего: 3



bems
Цитата(bems @  3.8.2006,  14:23 Найти цитируемый пост)
(stats.dwBytesXmited+stats.dwBytesRcved-BytesIn-BytesOut)*8 должно давать количество бит за интервал

Мне кажется, тут есть две ошибки:
1. нельзя складывать принятые байты и переданные (что-то одно, ведь прием и передача могут идти параллельно);
2. нужно умножать не на 8, а на 10 (если не на 11), ведь кроме 8 бит данных есть еще стартовый и как минимум один стоповый биты.
PM MAIL   Вверх
bems
Дата 4.8.2006, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Цитата(dumb @  3.8.2006,  17:45 Найти цитируемый пост)
тогда тут может быть только одна причина - сжатие. 

у меня dwCompressionRatioIn, dwCompressionRatioOut - нули
Цитата(mai62 @  4.8.2006,  00:11 Найти цитируемый пост)
1. нельзя складывать принятые байты и переданные (что-то одно, ведь прием и передача могут идти параллельно);

И что из них ограничено dwBps? То есть имеется в виду, что можно dwBps читать в это же время столькоже пересылать? не понял ничего...
Цитата(mai62 @  4.8.2006,  00:11 Найти цитируемый пост)
2. нужно умножать не на 8, а на 10 (если не на 11), ведь кроме 8 бит данных есть еще стартовый и как минимум один стоповый биты. 
Ну если это единственная ошибка, то я получу еще большее число в результате, и тогда срвсем крышей тронусь, а если вместе с номером один... то какое точное число бит для пересылки одного байта?

Добавлено @ 08:50 
Цитата(dumb @  3.8.2006,  17:45 Найти цитируемый пост)
вроде бывает(в зависимости от настроек), что после ретрейнов устанавливается скорость выше, чем была при установлении соединения. 
поподробнее, плиз. Или хоть ссылочку


Это сообщение отредактировал(а) bems - 4.8.2006, 08:46


--------------------
Обижено школьников: 8
PM MAIL   Вверх
mai62
Дата 4.8.2006, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 27.2.2006

Репутация: 2
Всего: 3



Цитата(bems @  4.8.2006,  08:43 Найти цитируемый пост)
И что из них ограничено dwBps? То есть имеется в виду, что можно dwBps читать в это же время столькоже пересылать? не понял ничего...

Да. Исторически сложилось, что первые модемы подключались через последовательный порт, в котором есть отдельная физическая линия для передачи данных и отдельная для приема (и работать они могут одновременно). dwBps определяет скорость передачи данных по каждой из этих линий. Поэтому надо считать кол-во прошедших байтов по каждой из этих линий (каждому направлению передачи данных) отдельно.

PM MAIL   Вверх
bems
Дата 4.8.2006, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Цитата(mai62 @  4.8.2006,  09:36 Найти цитируемый пост)
 Поэтому надо считать кол-во прошедших байтов по каждой из этих линий (каждому направлению передачи данных) отдельно.
Не надо. Надо знать, что это не ошибка расчетов. А ошибка есть только если мои UsedBps>dwBps*2, я правильно понял?



--------------------
Обижено школьников: 8
PM MAIL   Вверх
dumb
Дата 4.8.2006, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 5
Всего: 158



Цитата(bems @  4.8.2006,  08:43 Найти цитируемый пост)
у меня dwCompressionRatioIn, dwCompressionRatioOut - нули

ну, для начала, это таки относящиеся к софтовому сжатию переменные. я же говорил про хардовое.
а по поводу подсчета - умножать надо на 8, ибо стоповые биты и четности всякие - это из другой оперы. каким образом и сколько бит используется для передачи одного байта модемом в линии нам не сильно интересно - это сугубо его(модема) лично дело.
режим передачи (дуплекс или симплекс) определяется настройками хардового протокола соединения.

так что, похоже, надо просто выводить link bps, in bps, out bps.

ps. могу ошибаться - давно дело было... user posted image

Добавлено @ 14:02 
опять же, есть подозрение, что значение dwBps(как и то, что выдает модем при соединении) является условным и приблизительным.
PM MAIL   Вверх
bems
Дата 4.8.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Цитата(dumb @  4.8.2006,  14:00 Найти цитируемый пост)
опять же, есть подозрение, что значение dwBps(как и то, что выдает модем при соединении) является условным и приблизительным. 
не понял этой фразы. У меня есть два варианта толкования
а) то, что выдает модем при соединении является условным и приблизительным. есть подозрение, что значение dwBps тоже.
б) есть подозрение, что эти значения условны и приблизительны.

Насколько я знаю, dwBps это и есть то что выдает модем в строке CONNECT. Поэтому если ты имел ввиду вариант а, то расскажи пожалуйста о "то, что выдает модем при соединении" или дай ссылку. Что должно означать это значение, если оно условно и приблизительно. Не думаю ,что оно предназначено только для вывода пользователю.



--------------------
Обижено школьников: 8
PM MAIL   Вверх
dumb
Дата 4.8.2006, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 5
Всего: 158



не сказал точно, потому что не работал с этими функциями и не видел значений dwBps.

вариант а. цифра, указываемая модемом в строке коннекта является характеристикой скорости, а не точным значением пропускной способности. тебя не смущает тот факт, что эти цифры из таблицы и всегда округленные? - 9600,12000,14400,16800,19200,21600 итд итп.
реальная скорость может быть как ниже(помехи, ретрейн с понижением), так и выше(сжатие, ретрейн с повышением(?)).

ссылки не дам, ибо нет их у меня. зато в гугле есть. smile

ps. для меня остается загадкой, какую именно правду ты ищешь и зачем она тебе... user posted image
PM MAIL   Вверх
mai62
Дата 5.8.2006, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 27.2.2006

Репутация: 2
Всего: 3



Цитата(bems @  4.8.2006,  10:09 Найти цитируемый пост)
Надо знать, что это не ошибка расчетов. А ошибка есть только если мои UsedBps>dwBps*2, я правильно понял?

Думаю надо считать отдельно и сравнивать каждое значение с dwBps.

Цитата(dumb @  4.8.2006,  15:31 Найти цитируемый пост)
тебя не смущает тот факт, что эти цифры из таблицы и всегда округленные? - 9600,12000,14400,16800,19200,21600 итд итп.

Это не что иное как стандартные скорости обмена по последовательному порту. Конечно, они задают не реальную скорость обмена, а максимально достижимую. А точнее, это значение задает ожидаемую длительность одного бита как t=1/speed (именно это важно поскольку обмен по последовательному порту асинхронный и представление о длине бита должно быть приблизительно (+-5%) равным у обоих участников обмена (в данном случае модема и компьютера)).
PM MAIL   Вверх
bems
Дата 5.8.2006, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



спасибо


--------------------
Обижено школьников: 8
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0573 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.