Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Количество переданныхи полученных байт


Автор: Олег_Игоревич 26.4.2005, 15:44
Доброго Вам времени суток !!!
Подскажите пожалуйста как можно измерить кол-во переданных/ скачанных байт по модемному соединению и по локалке? Хотелось бы узнать как это реализовать без функции getiftable !!!
Заранее спасибо !!!

Автор: Rouse_ 26.4.2005, 19:13
Чем обоснована подобная избирательность в выборе средств?

Автор: Олег_Игоревич 26.4.2005, 20:31
Дело в том , что мне необходимо показывать входящий/исходящий трафик только тогда , когда моя программа активна а также запоминать входящий/исходящий трафик в программе. Функция getiftable выдаёт входящий/исходящий трафик за всю интернет-сессию(dial-up) пока включён компьютер.
Заранее спасибо !!!

Автор: Rouse_ 26.4.2005, 22:02
Так а в чем проблема?
Запускаешь, считываешь текущий объем и берешь его за ноль. Все остальные данные показываешь с вычетом первоначально запомненного объема данных.

Автор: RA 26.4.2005, 23:12
..

Автор: Олег_Игоревич 27.4.2005, 07:46
Скажите пожалуйста , откуда в архиве (trafic.rar) взяты файлы :
-IPHLPAPI. pas
-IPHelper. pas
В Delphi их нет.
И ещё - исходник в Delphi при запуске выдаёт ошибку!

Спасибо.

Автор: Rouse_ 27.4.2005, 08:37
Цитата
Скажите пожалуйста , откуда в архиве (trafic.rar) взяты файлы :
-IPHLPAPI. pas
-IPHelper. pas

Это обычная транскрипция сишных заголовков IPHLPAPI.H, IPHelper.h на паскаль.


Цитата
И ещё - исходник в Delphi при запуске выдаёт ошибку!

Выдает не ошибку - а срабатывает исключение при делении на ноль.
Перепиши процедуру вот так:
Код

procedure TTraffic.NewCycle(const InOctets, OutOctets, TrafficSpeed: Dword);
begin
  Inc(self.FSecondsActive);

  If not Running then Exit;

  FSpeed := TrafficSpeed;

  //IN
  self.FInPerSec := InOctets - self.PrevCountIn;
  Inc(self.FInTotal, self.InPerSec);
  if InPerSec > 0 then Inc(FActiveCountIn);
  if InPerSec > PeakInPerSec then FPeakInPerSec := InPerSec;
  try
    if ActiveCountIn = 0 then
      self.FAverageInPerSec := 0
    else
      self.FAverageInPerSec := InTotal div ActiveCountIn
  except
    self.FAverageInPerSec := 0
  end;
  FPrevCountIn := InOctets;

  //OUT
  self.FOutPerSec := OutOctets - self.PrevCountOut;
  Inc(self.FOutTotal, self.OutPerSec);
  if OutPerSec > 0 then Inc(FActiveCountOut);
  if OutPerSec > PeakOutPerSec then FPeakOutPerSec := OutPerSec;
  try
    if ActiveCountOut = 0 then
      self.FAverageOutPerSec := 0
    else
      self.FAverageOutPerSec := OutTotal div ActiveCountOut
  except
    self.FAverageOutPerSec := 0
  end;
  FPrevCountOut := OutOctets;

end; (*NewCycle*)

Автор: ArkaNN 9.7.2005, 18:51
Скажите пожалуйста, вот в этой проге считаетсявесь траффик. А можно ли, тоже через Get_IfTableMIB, считать весь траффик, но кроме некоторых IP-ов. Т.е. не считать траффик с этих ипов и сичтать со всех остальных.
Заранее благодарен!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)