Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2013, 05:42   #1
Train-GT
Пользователь
 
Регистрация: 22.11.2012
Сообщений: 26
По умолчанию Контроль расхода трафика интернет

Здравствуйте! У меня такой, уже заезженный вопрос. У меня 3G модем с лимитным интернетом. Чтобы не превысить трафик я при каждом завершении сеанса записываю свой расход, но это жутко грамостко и неудобно. Решил сделать простую программу, которая просто будет записывать в label сумму принятых и переданных Мб. Просмотрел много тем и в том числе на вашем форуме, так интересная программа во вложении traffic_source_rar_16845, но в силу своего знания языка не могу разобраться что и как нужно из кода программ задействовать и вывадить в label. Огромное спасибо, если поможете! Код программы для удобства ниже:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,  ComCtrls, StdCtrls, ToolWin, ExtCtrls, XPMan;



type
 PMibIfRow = ^TMibIfRow;
 TMibIfRow = packed record
    wszName		: array[0..255] of WideChar;
    dwIndex		: DWORD;
    dwType		: DWORD;
    dwMtu		: DWORD;
    dwSpeed		: DWORD;
    dwPhysAddrLen	: DWORD;
    bPhysAddr		: array[1..8] of Byte;
    dwAdminStatus	: DWORD;
    dwOperStatus	: DWORD;
    dwLastChange	: DWORD;
    dwInOctets		: DWORD;
    dwInUcastPkts	: DWORD;
    dwInNUCastPkts	: DWORD;
    dwInDiscards	: DWORD;
    dwInErrors		: DWORD;
    dwInUnknownProtos	: DWORD;
    dwOutOctets		: DWORD;
    dwOutUCastPkts	: DWORD;
    dwOutNUCastPkts	: DWORD;
    dwOutDiscards	: DWORD;
    dwOutErrors		: DWORD;
    dwOutQLen		: DWORD;
    dwDescrLen		: DWORD;
    bDescr		: array[0..255] of Char;
 end;

 pMibIfArray = ^TMIBIFARRAY;
 TMibIfArray = array [0..512] of TMibIfRow;

 PMibIfTable = ^TMibIfTable;
 TMibIfTable = packed record
   dwNumEntries	: DWORD;
   Table    	: TMibIfArray;
 end;

 TMacAddress=array [1..8] of byte;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    Bevel1: TBevel;
    Timer1: TTimer;
    XPManifest1: TXPManifest;
    procedure Timer1Timer(Sender: TObject);
  private
    function GetStrMac(Mac:TMacAddress; size:integer):string;
    function GetInterfaceType (types:integer):string;
    function Traff(count:integer):string;
    function SpeedToStr(value:dword):string;
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Form1: TForm1;

  function GetIfTable(pIfTable:PMibIfTable; pdwSize: PULONG;
                bOrder: boolean ): DWORD; stdCall; external 'IPHLPAPI.DLL';
            


implementation

{$R *.dfm}

function TForm1.GetInterfaceType(types: integer): string;
begin
 Result:='Неизвестно';
 case types of
  1: Result:='Other';
  6: Result:='Ethernet';
  9: Result:='Token ring';
  23: Result:='PPP';
  24: Result:='Loopback';
  37: Result:='ATM';
  71: Result:='IEEE 802.11';
  131: Result:= 'Tunnel';
  144: Result:='IEEE 1394 (Firewire)';
 end;
end;

function TForm1.GetStrMac(Mac: TMacAddress; size: integer): string;
var
 i:integer;
begin
 if size = 0 then
  begin
   result:='00-00-00-00-00-00';
   Exit;
  end;

 Result:='';
 for i:=1 to size do
  Result:=Result+IntToHex(Mac[i], 2)+'-';
 Delete(Result, length(Result), 1);
end;

function TForm1.SpeedToStr(value: dword): string;
const
 KB=1000;
 MB=KB*1000;
 GB=MB*1000;
begin
 if Value<KB then
  Result:=FormatFloat('#,##0.00 bps',Value)
 else
  if Value<MB then
   Result:=FormatFloat('#,##0.00 Kbps', Value/KB)
  else
   if Value<GB then
  Result:=FormatFloat('#,##0.00 Mbps', Value/MB)
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  _MibIfTable:PMibIfTable;
  _P:Pointer;
   i:integer;
  _buflen:dword;
  _error:dword;
begin
 listview1.Items.Clear;
 _buflen:=sizeof(_MibIfTable^);
 New(_MibIfTable);
 _P:=_MibIfTable;
 _error:=GetIfTable(_MibIfTable, @_buflen, false);

 if _error <> NO_ERROR then
  begin
   ShowMessage('Произошла ошибка!');
   Exit;
  end;


 for i:=0 to TMibIfTable(_P^).dwNumEntries-1 do
  with ListView1.Items.Add do
   begin
    caption:=Trim(TMibIfTable(_p^).table[i].bDescr);
    subitems.Add(GetInterfaceType(TMibIfTable(_P^).table[i].dwtype));
    subitems.Add(GetStrMac(TMacAddress(TMibIfTable(_p^).Table[i].bPhysAddr),TMibIfTable(_p^).table[i].dwPhysAddrLen));
    subitems.add(SpeedToStr(TMibIfTable(_p^).table[i].dwSpeed));
    subitems.Add(Traff(TMibIfTable(_p^).table[i].dwOutOctets));
    subitems.Add(Traff(TMibIfTable(_p^).table[i].dwInOctets)); 
    subitems.Add(IntToStr(TMibIfTable(_p^).table[i].dwOutErrors)); 
    subitems.Add(IntToStr(TMibIfTable(_p^).table[i].dwInErrors));
   end;
 dispose(_MibIfTable);

end;

function TForm1.Traff(count: integer): string;
const
 KB=1024;
 MB=KB*1024;
 GB=MB*1024;
begin
 if Count<KB then
  Result:=FormatFloat('#,##0.00 B', count)
 else
  if count<MB then
   Result:=FormatFloat('#,##0.00 KB', count/KB)
  else
   if count<GB then
    Result:=FormatFloat('#,##0.00 MB', count/MB);
 end;
end.
Train-GT вне форума Ответить с цитированием
Старый 17.09.2013, 06:17   #2
grominfo
Форумчанин
 
Аватар для grominfo
 
Регистрация: 30.05.2011
Сообщений: 651
По умолчанию

А приложение, которое находится на устройстве 3G не устраивает?
Создание, программирование и сопровождение сайтов любой сложности.
Изготовление программ на заказ.
Список услуг и портфолио на сайте www.andreygrom.ru
grominfo вне форума Ответить с цитированием
Старый 17.09.2013, 14:08   #3
Train-GT
Пользователь
 
Регистрация: 22.11.2012
Сообщений: 26
По умолчанию

нет. оно выводит, но на этом всё. я планирую сделать некоторое подобие счетчика, которое будет автоматически суммировать показатели прошлого сеанса с настоящим и показывать сколько трафика ещё осталось. Также можно остаток ещё разбить на оставшиеся дни и т.д. Эти действия я и сам могу сделать, а вот только нужно в этот самый label записать те Мб. Как это сделать - не знаю. Подскажите?
Train-GT вне форума Ответить с цитированием
Старый 17.09.2013, 14:53   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
subitems.Add(GetInterfaceType(TMibIfTable(_P^).table[i].dwtype));// протокол
 subitems.Add(Traff(TMibIfTable(_p^).table[i].dwOutOctets)); // исходящий трафик
    subitems.Add(Traff(TMibIfTable(_p^).table[i].dwInOctets)) // входящий трафик
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 17.09.2013, 15:01   #5
Train-GT
Пользователь
 
Регистрация: 22.11.2012
Сообщений: 26
По умолчанию

ага, а в label это как вывести, т.е. label.caption:='Traff(TMibIfTable(_ p^).table[i].dwInOctets)';
точно, showMessage(Traff(TMibIfTable(_p^). table[i].dwInOctets));

Последний раз редактировалось Train-GT; 17.09.2013 в 15:20.
Train-GT вне форума Ответить с цитированием
Старый 01.10.2013, 11:40   #6
Train-GT
Пользователь
 
Регистрация: 22.11.2012
Сообщений: 26
По умолчанию

А вот ещё вопрос, в списке всех подключений появляется MS TCP Loopback interface. И если я пишу label.caption:=Traff(TMibIfTable(_ p^).table[i].dwInOctets), то в него вписывается имеено этот MS TCP. А как сделать так, чтобы в лабел выводились показатели только моего WAN интерфейса?Безымянный.jpg
Train-GT вне форума Ответить с цитированием
Старый 01.10.2013, 23:32   #7
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

У меня тоже 3G модем. Использую NetWorx для подсчёта трафика. Когда деньги списываются со счёта - я нажимаю Reset.

Она довольно подробно считает:
Изображения
Тип файла: jpg 75.jpg (29.2 Кб, 114 просмотров)
Тип файла: jpg 76.jpg (59.4 Кб, 117 просмотров)
8Observer8 вне форума Ответить с цитированием
Старый 02.10.2013, 08:21   #8
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

никогда не интересовался данным вопросом, но вот тут
Код:
wszName          : array[0..255] of WideChar;
имя вашего интерфейса мб
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 02.10.2013, 15:00   #9
Train-GT
Пользователь
 
Регистрация: 22.11.2012
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Mad_Cat Посмотреть сообщение
никогда не интересовался данным вопросом, но вот тут
Код:
wszName          : array[0..255] of WideChar;
имя вашего интерфейса мб
т.е.? что ты хочешь сказать?
Train-GT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ограничение скорости интернет трафика на отдельных компьюерах Poma][a Софт 3 17.04.2012 14:42
мониторинг трафика локальных и интернет сетей rezvei Помощь студентам 3 15.02.2011 21:39
Контроль трафика в сети 125874 Работа с сетью в Delphi 3 26.10.2010 13:04
Контроль трафика... Phantom Работа с сетью в Delphi 4 10.04.2009 14:02
Контроль трафика Marsik Софт 5 04.11.2008 09:22