Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Domain_name_IP_Traffic [D7, XP]


Страницы:   1 2 3

jonin ©   (2009-05-17 14:05:00) 

как то я спрашивал про определение ИПов трафика и тд, мне подсказали прогу посмотреть эту дак вот я посмотрел там проип и трафик и нашол сверху в коде (  dwSpeed          : DWORD; // определяет текущую скорость передачи в битах в секунду)мне скорость тоже надо определить не нечего чтото не получаеться(

вот сам код программа http://www.delphisources.ru/pages/sources/internet/1_internet.html

подскажите может раз там есть dwSpeed  то как то можно определить скорость или вывести


Сергей М.   (2009-05-20 19:58:00) [21]


> просто не вытерпел


Эт точно)


> задали чтоббы мы самиизучали и делали


А получается-то иначе).. Не стыдно ?


> как делать так чтобы запись из базы удалять последнюю?


Из какой такой "базы" ?
Из базы данных что ли ?
В базе данных нет никаких записей - ни первой ни последней.
Смотри не ляпни эту глупость преподу - банан тебе будет обеспечен)


jonin   (2009-05-20 19:04:00) [22]

оуоу 0_0 спасибо огромное за пмошь Сергей М. , наверно ты просто не вытерпел моей тупости) я просто еще мало что знаю а проект задали чтоббы мы сами изучали и делали, я немножко конечно переделаю и выводить буду не в мемо
СПАСИБО за помошь Сергей!
и еще вопросик 1 как делать так чтобы запись из базы удалять последнюю?
и еще правдо 1) а мне интересно сколько вам лет?


Сергей М.   (2009-05-20 11:21:00) [23]


type
TMibIfRow = packed record
 wszName          : array[0..255] of WideChar;
 dwIndex          : DWORD;
 dwType           : DWORD;
 dwMtu            : DWORD;
 dwSpeed          : DWORD;
 dwPhysAddrLen    : DWORD;
 bPhysAddr        : array[0..7] 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;
TMibIfArray = array [0..512] of TMibIfRow;
PMibIfRow = ^TMibIfRow;
PMibIfArray = ^TMibIfArray;

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

TGetIfTable = function(pIfTable: PMibIfTable; pdwSize: PULONG; bOrder: Boolean): DWORD; stdcall;

PMAC = ^TMAC;
TMAC = array [0..5] of Byte;

PIfDataItem = ^TIfDataItem;
TIfDataItem = packed record
   MAC: TMAC;
   SentAmount, RcvdAmount: DWord;
   SentDelta, RcvdDelta: DWord;
end;
TIfData = array of TIfDataItem;

var
 FLibHandle: THandle = 0;
 GetIfTable: TGetIfTable;
 IfTable: TMibIfTable;
 IfTableSize: DWord;
 IfData: TIfData;

procedure TForm1.Button6Click(Sender: TObject);
begin
 if Timer1.Enabled then begin
   Timer1.Enabled := False;
   SetLength(IfData, 0);
   FreeLibrary(FLibHandle);
 end
 else
 begin
   FLibHandle := LoadLibrary('IPHLPAPI.DLL'); // загружаем библиотеку
   Win32Check(FLibHandle <> 0);
   GetIfTable:=GetProcAddress(FLibHandle, 'GetIfTable');
   Win32Check(Assigned(@GetIfTable));
   Timer1.Interval := 1000;
   Timer1.Enabled := True;
 end;
end;

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 GetItemByMAC(var AMAC: TMAC): PIfDataItem;
var
 i: Integer;
begin
 Result := nil;
 for i := 0 to Length(IfData) - 1 do
   if CompareMem(@IfData[i].MAC, @AMAC, SizeOf(TMAC)) then
   begin
     Result := @IfData[i];
     Break;
   end;
 if not Assigned(Result) then
 begin
   i := Length(IfData);
   SetLength(IfData, i + 1);
   Result := @IfData[i];
   with Result^ do
   begin
     Move(AMAC, MAC, SizeOf(TMAC));
     SentAmount := 0;
     RcvdAmount := 0;
     SentDelta := 0;
     RcvdDelta := 0;
   end;
 end;
end;

function GetUpdatedIfDataItem(var AMAC: TMAC; ASent, ARcvd: DWord): PIfDataItem;
begin
 Result := GetItemByMAC(AMAC);
 with Result^ do
 begin
   SentDelta := Max(ASent - SentAmount, 0);
   RcvdDelta := Max(ARcvd - RcvdAmount, 0);
   SentAmount := ASent;
   RcvdAmount := ARcvd;
 end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
 MAC: PMAC;
 SendSpeed, RecvSpeed: DWord;
 IfDataItem: PIfDataItem;
 i, Seconds: Integer;
begin
 Memo.Clear;
 if GetIfTable(@IfTable, @IfTableSize, False) = 0 then
 begin
   Seconds := Timer1.Interval div 1000;
   for i:= 0 to IfTable.dwNumEntries-1 do //цикл по всем интерфейсам
     with IfTable.Table[i], Memo.Lines do
     begin
       MAC := @IfTable.Table[i].bPhysAddr;
       IfDataItem := GetUpdatedIfDataItem(MAC^, dwOutOctets, dwInOctets);
       SendSpeed := IfDataItem.SentDelta div Seconds;
       RecvSpeed := IfDataItem.RcvdDelta div Seconds;
       Add('--------------------------------------------------');
       Add('MAC address        : ' + GetMAC(MAC^, dwPhysAddrLen));
       Add('Description        : ' + string(bDescr)); // описание интерфейса
       Add('Amount bytes sent  : ' + IntToStr(dwOutOctets));
       Add('Amount bytes rcvd  : ' + IntToStr(dwInOctets));
       Add('Average send speed : ' + IntToStr(SendSpeed) + ' bytes per sec (' + FormatFloat('# ##0.0', SendSpeed/1024) + ' kbytes per sec)');
       Add('Average recv speed : ' + IntToStr(RecvSpeed) + ' bytes per sec (' + FormatFloat('# ##0.0', RecvSpeed/1024) + ' kbytes per sec)');;
     end;
 end;
end;


jonin   (2009-05-20 06:13:00) [24]

видишь она в таймере), по идее ты подсказал мне правильно далеть
b:=Table.Table[i].dwInOctets;
c:=b-a;
a:=b;
Form1.Edit3.Text:=IntToStr(c) + ' байт в секунду';
но почему козда даже разеденяешь соединение с интернетом он пишет такое большое число, 4274004809 байт в секунду


jonin   (2009-05-20 06:10:00) [25]

да нет она в таймере
procedure TForm1.Timer2Timer(Sender: TObject);
// вспомогательная функция, преобразующая МАС адрес к
// "нормальному" виду определяем специальный тип, чтобы
// можно было передать в функцию массив
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;

var
FLibHandle: THandle;
Table: TMibIfTable;
i, Size, DS, a1, b1: integer;
s, trafnormin, trafnormout, dio : string;
DTS : real;
b, c : DWord ;
begin
Timer2.Enabled:=false; // приостанавливаем на всякий случай таймер
ListBox1.Items.BeginUpdate;
ListBox1.Items.Clear; // очищаем список
FLibHandle:=LoadLibrary('IPHLPAPI.DLL'); // загружаем библиотеку
if FLibHandle=0
then Exit;
@GetIfTable:=GetProcAddress(FLibHandle, 'GetIfTable');
if not Assigned(GetIfTable)
then
 begin
  FreeLibrary(FLibHandle);
  Close;
 end;
//
Size:=SizeOf(Table);
if GetIfTable(@Table,@Size,false)=0
then // выполняем функцию
 for i:=0 to Table.dwNumEntries-1 do // кол-во сетевых карт
  begin
   with ListBox1.Items do
    begin // выводим результаты
     // if string(GetMAC(TMAC(Table.Table[i].bPhysAddr),Table.Table[i].dwPhysAddrLen))<>'00 -00-00-00-00-00' // сравнение MAC адресов
     // then
      begin
       Add({'Description: '+}string(Table.Table[i].bDescr)); // наименование интерфейса
       Add('MAC-adress: '+string(GetMAC(TMAC(Table.Table[i].bPhysAddr),Table.Table[i].dwPhysAddrLen))); // МАС адрес
       // перевод к нормальным единицам "Входящего" трафика
       trafbitin:=Table.Table[i].dwInOctets; // всего принято байт
       trafnormin:=BytesToString(trafbitin);
       Form1.Edit_traf_in.Text:=trafnormin;
       // перевод к нормальным единицам "Исходящего" трафика
       trafbitout:=Table.Table[i].dwOutOctets; // всего отправлено байт
       trafnormout:=BytesToString(trafbitout);
       Form1.Edit_traf_out.Text:=trafnormout;
       ////////////////////////////////////// сброс трафика
       if stop_traf=true
       then
        begin
         trafbitold:=trafbitin;
         trafnormin:='0,00 B';
         trafnormout:='0,00 B';
        end;
       //
       if trafbitin>=trafbitold // новый трафик больше старого
       then
        begin
         trafbitin:=trafbitin-trafbitold;
         trafnormin:=BytesToString(trafbitin);

        end
       else  // новый трафик меньше старого
        begin
         trafbitin:=trafbitold;
         trafnormin:=BytesToString(trafbitin);
        end;
       /////////////////////////////////////
       Add({'In (Byte): '+}trafnormin); // всего принято байт
       Add({'Out (Byte): '+}trafnormout); // всего отправлено байт
       Add('-------------------------------------------------'); //
       Form1.Label_Description.Caption:=(Form1.ListBox1.Items[0]);

      end;
    end;

b:=Table.Table[i].dwInOctets;
c:=b-a;
a:=b;
Form1.Edit3.Text:=IntToStr(c) + ' байт в секунду';
  end;
//
EnumInterfaces(s);
ListBox1.Items.Add(s);
//
ListBox1.Items.EndUpdate;
FreeLibrary(FLibHandle);
Timer2.Enabled:=true; // не забываем активировать таймер
Form1.Edit1.Text:=Form1.ListBox1.Items[8];
Form1.Edit2.Text:=Form1.ListBox1.Items[7];
end;


Сергей М.   (2009-05-19 21:29:00) [26]


> сделал в ту же процедуру где все определяеться а не в отдельный
> таймер


Так а как же ты без таймера секундные интервалы отсчитываешь ?)


jonin   (2009-05-19 21:05:00) [27]

вот сейчас сделал в ту же процедуру где все определяеться а не в отдельный таймер в итоге у меня выводит примерно в районе
4274004809 байт в секунду
ка то мне это кажеться как то много потому тчо у меня скорость интернет соединения 1мб но по идее не выше 180кб


jonin   (2009-05-19 20:55:00) [28]

ну вот ты говоришь подключаешься к MifTable
там вот переменная Table: TMibIfTable; я ее в глобальные переменные переношу чтобы его видели все процедуры в том числе и таймер
но при компиляции на нее ошибка
Undeclared identifier: 'TMibIfTable'

после нее еще одна типо оьявленна в этом коде
Identifier redeclared: 'TMibIfTable'
вот на это показывает что он сново оьявлен
type
TMibIfTable = packed record
  dwNumEntries: DWORD;
  Table       : TMibIfArray;
end;
PMibIfTable = ^TMibIfTable;

var
GetIfTable:function(pIfTable: PMibIfTable; pdwSize: PULONG;
                             bOrder: Boolean): DWORD; stdcall;


вот я и не пойму куда что добовлять


Сергей М.   (2009-05-19 20:38:00) [29]


> я с ним не разобрался


Ну так давай уже разбирайся до конца !
Что мешает ? Что в этом коде не понятно ?


jonin   (2009-05-19 20:34:00) [30]


> подключаешься к MifTable

блин я не знаю как это сделать код то не мой да и до конца я с ним не разобрался подскажи плиз как то сделать


Сергей М.   (2009-05-19 20:05:00) [31]


> это типо глобальная?


Это типо нелокальная.


> пишу b, с : DWord = 0;


Жирное убери.


> каким образом это сделать?


Ну у тебя же есть перед носом пример

> вот сам код программа http://www.delphisources.ru/pages/sources/internet/1_internet.html


jonin   (2009-05-19 18:22:00) [32]


>  a : DWord= 0; // статическая (!!) переменная

это типо глобальная?

и когда я делаю в таймере в варе пишу b, с : DWord= 0; указатель показывает на 0 и пишет в ошибках Cannot initialize local variable


> - подключаешься к MifTable

сори за нубский вопрос, они правдо все нубские) я ведь только учусь
каким образом это сделать?


Сергей М.   (2009-05-19 17:29:00) [33]

var
 a : DWord= 0; // статическая (!!) переменная твоего юнита
 b, с : DWord= 0; // локальные переменные метода-обработчика таймера

В обработчике OnTimer :

- подключаешься к MifTable, читаешь dwInOctets в переменную b

- вычисляешь разницу:
c := b - a

- сохраняешь тек.значение b в переменную a
a := b

- показываешь с:

MyForm.MyLabel.Caption := IntToStr(c) + ' байт в секунду'


jonin   (2009-05-19 17:01:00) [34]

ааа вон что)) блин ступил
а как вот теперь сделать чтобы была эта задержка в  1секунду если делать проверку в таймере с интервалом в 1000(1сек) то получиться что оно мгновенно прравняет и вычтет из B A и получиться 0 надо как то чтобы бал промежуток в 1 сек, подскажи как я в таймере делаю инадо наверно какое то условие
a:=Table.Table[i].dwInOctets;
if(прошла секунда) then
                                 b:=Table.Table[i].dwInOctets;
                                 c=b-a; // вот эта самая скорость)
                           end;

подскажите с условием пожалуйста


Сергей М.   (2009-05-19 16:38:00) [35]


> а дальше что С делить на time:=time+1


Зачем делить-то, если "через секунду" ?

N / 1 = N

Если период опроса равен 1 секунде, то и делить ничего не надо : разница B - A и есть скорость, выраженная в байтах в секунду ..

Делить следует. если период опроса не равен 1 секунде)


jonin   (2009-05-19 16:32:00) [36]

черт нечего не получаеться Т_Т сейчас посмотрел я время делаю постоянно time:=time+1 а сколько скачено беру dwInOctets

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

как я понял брать dwInOctets присвоить его к какой то переменной например A, дальше через секунду я его присваюиваю например к Bдальше из B- Aприравниваю к Cа дальше что Сделить на time:=time+1


Сергей М.   (2009-05-19 16:18:00) [37]


> jonin   (19.05.09 16:10) [12]


Бррр ..
Ничего не понял)

Какие такие real и Bytes ? Откуда они взялись ?


jonin   (2009-05-19 16:10:00) [38]

а как перевсети из real в Bytes
я считаю в прграмме как бы делю все это и вывожу но чтобы вывести данные мне нужен тип стринг, перевел так FloatToStr, а можно как нибудь сдеалть так же как BytesToString ?


Сергей М.   (2009-05-18 21:12:00) [39]


> а если мне


И тебе тоже)


jonin   (2009-05-18 20:46:00) [40]

а если мне сколько скачено делить на время то тоже же получиться скорость?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо