Форум: "Начинающим";
Текущий архив: 2007.03.11;
Скачать: [xml.tar.bz2];
ВнизПодсчёт трафика в Delphi Найти похожие ветки
← →
Alban © (2007-02-12 00:19) [0]Подскажите пожалуйста кто знает как подсчитывать трафик по каждому IP-адресу отдельно
← →
alexm_hs © (2007-02-16 23:48) [1]Тебе помогут функции из "IPHLPAPI.DLL"
Вот пример. Кусок выдрал из проги, может чегонить забыл включить, но догадаться можно будет
type
TMibIfTable = packed record
dwNumEntries: DWORD;
Table: TMibIfArray;
end;
PMibIfTable = ^TMibIfTable;
var
GetIfTable: function(pIfTable: PMibIfTable;
pdwSize: PULONG;
bOrder: Boolean): DWORD; stdcall;
procedure TTrafficForm.tmrTrafficTimer(Sender: TObject);
var in_b, out_b: string;
// IntrNum, Rez: DWORD;
// Вспомогательная функция, преобразующая МАС адрес к "нормальному" виду
//Определяем специальный тип, чтобы можно было передать в функцию массив
type TMAC = array[0..7] of Byte;
//В качестве первого значения массив, второе значение, размер данных в массиве
function GetMAC(Value: TMAC; Length: DWORD): string;
var
i: Integer;
begin
if Length = 0 then Result := "00-00-00-00-00-00" else
begin
Result := "";
for i := 0 to Length - 2 do
Result := Result + IntToHex(Value[i], 2) + "-";
Result := Result + IntToHex(Value[Length - 1], 2);
end;
end;
function FormatSize(str: string): string;
var i, j: integer;
res: string;
begin
j := 0;
for i := length(str) downto 1 do begin
if j = 3 then begin res := " " + res; j := 0; end;
res := str[i] + res;
inc(j);
end;
result := res;
end;
//Сама процедура
var
FLibHandle: THandle;
Table: TMibIfTable;
// Row: TMibIfRow;
i: integer;
Size: integer;
in_t, out_t, delta_in, delta_out: int64;
begin
tmrTraffic.Enabled := false; //Приостанавливаем на всякий случай таймер
lvTraffic.Items.BeginUpdate;
lvTraffic.Items.Clear; //Очищаем список
FLibHandle := LoadLibrary("IPHLPAPI.DLL"); //Загружаем библиотеку
if FLibHandle = 0 then Exit;
@GetIfTable := GetProcAddress(FLibHandle, "GetIfTable");
if not Assigned(GetIfTable) then
begin
FreeLibrary(FLibHandle);
exit;
end;
Size := SizeOf(Table);
if GetIfTable(@Table, @Size, false) = 0 then //Выполняем функцию
for i := 0 to Table.dwNumEntries - 1 do begin
with lvTraffic.Items.Add do begin //Выводим результаты
Caption := string(Table.Table[i].bDescr); //Наименование интерфейса
SubItems.Add(GetMAC(TMAC(Table.Table[i].bPhysAddr),
Table.Table[i].dwPhysAddrLen)); //MAC адрес
SubItems.Add(FloatToStr(Table.Table[i].dwSpeed / 1000000)); //скорость
in_t := Table.Table[i].dwInOctets;
out_t := int64(Table.Table[i].dwOutOctets);
delta_in := abs(in_t - buff_in[i]);
delta_out := abs(out_t - buff_out[i]);
in_b := IntToStr(buff_in[i] + Delta_in);
out_b := IntToStr(buff_out[i] + delta_out);
Buff_in[i] := in_t;
Buff_out[i] := out_t;
SubItems.Add(FormatSize(in_b) + " (" + Format("%.2f", [delta_in / 1024]) + " кб/с)"); //Всего принято байт
SubItems.Add(FormatSize(out_b) + " (" + Format("%.2f", [delta_out / 1024]) + " кб/с)"); //Всего отправлено байт
end;
end;
lvTraffic.Items.EndUpdate;
FreeLibrary(FLibHandle);
tmrTraffic.Enabled := true; //Не забываем активировать таймер
for i := 0 to lvTraffic.Items.Count - 1 do
if lvTraffic.Items.Item[i].Caption = SelItemText then lvTraffic.Items.Item[i].Selected := true;
end;
← →
Alban © (2007-02-18 22:06) [2]Спасибо за помощь, а как узнать IP-адрес
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.03.11;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.038 c