Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Netzwerkauslastung / Traffic (https://www.delphipraxis.net/4111-netzwerkauslastung-traffic.html)

iaby 1. Jun 2004 07:46

Re: Netzwerkauslastung / Traffic
 
ja, der wert ist ja cardinal, also wird er automatisch auf 0 gesetzt, wenn man die maximale größe überspringt.
habs jetzt mit dem delta gemacht, funktioniert auch gut, aber perfekt ist es eben nicht.
ist halt typisch microsoft. alles so klein wie möglich halten (HD<128GB, ...)

gruss,
iaby

Calimero 3. Jul 2004 15:05

Re: Netzwerkauslastung / Traffic
 
Da sehr viele sich intressieren dafür wie man die Geschwindigkeit ermittelt hier ;-)

Das Beispiel zeigt den aktuellen Speed der ersten Netzwerkkarte (incoming Traffic) an (in kb/s)

Den Speed des Timers auf 1000 (1 sekunde)

Code:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,Winsock,
  IpExport,
  IpHlpApi,
  IpTypes,
  IpIfConst,
  IpRtrMib, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Label1: TLabel;
    procedure Timer1Timer(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  old: integer;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var MibRow: TMibIfRow;
IntfTable: PMibIfTable;
Size: DWORD;
I: Integer;
wert:integer;
begin
Size := 0;
if GetIfTable(nil, Size, True) <> ERROR_INSUFFICIENT_BUFFER then Exit;
  IntfTable := AllocMem(Size);
  try
    if GetIfTable(IntfTable, Size, True) = NO_ERROR then
    begin
      for I := 0 to IntfTable^.dwNumEntries - 1 do
      begin
     {$R-}MibRow := IntfTable.Table[I];{$R+}
        if MibRow.dwType <> MIB_IF_TYPE_ETHERNET then Continue; // oder MIB_IF_TYPE_PPP
       if i = 1 then begin // Welche Verbindung
       wert := MibRow.dwInOctets - old;


                      label1.caption := floattostr(round(Wert /1024 *100)/100) + ' KB/s';
                     old := MibRow.dwInOctets

                     end;
  end;
    end;


    finally
    FreeMem(IntfTable);
  end;

end;


end.

Bowler 7. Jul 2004 21:08

Re: Netzwerkauslastung / Traffic
 
Kann man wohl auch irgendwie herausfinden, welche Anwendung oder welche Adresse/Port sich hinter den in/out-Daten verbirgt?

Tubos 7. Jul 2004 22:04

Re: Netzwerkauslastung / Traffic
 
Neue Frage, neuer Thread...

Bowler 7. Jul 2004 22:11

Re: Netzwerkauslastung / Traffic
 
Okidokey, schon geschehen. :-D

http://www.delphipraxis.net/internal...ct.php?t=29398

vollmer-net 18. Dez 2004 14:32

Re: Netzwerkauslastung / Traffic
 
wo ist der anhang von Luckie hin? ich wollte mir die units gerne mal ansehen von Marcel van Brakel!

MrKnogge 18. Dez 2004 14:35

Re: Netzwerkauslastung / Traffic
 
Anhänge wurden vorläufig gesperrt, werden aber wieder freigeschaltet.

gruss

supermuckl 18. Dez 2004 16:01

Re: Netzwerkauslastung / Traffic
 
stichwort

IPHLPAPI.pas

xZise 27. Sep 2006 19:38

Re: Netzwerkauslastung / Traffic
 
Ich habe mal eine Frage... Auch wenns schon 2 Jahre her ist:
Ich bekomme so komische Werte (10 Stellen?) und teilweise Negativ (o.o)... Ich habe es mit Luckies Programmcode und den Dateien von Luckies anhang probiert (is übrigends bei Calimeros Code genauso)!

Dirkmswt 6. Okt 2006 12:57

Re: Netzwerkauslastung / Traffic
 
Und promt einen Fehler gefunden sobald der Rechner ein kleines Treiberproblem hat und die Lösung!

Ich hatte als mein Rechner ein paar Tage durchgelaufen war einen Fehler der Marke ErangeError,hat vielleicht noch keiner von euch gemerkt weils noch nicht gepostet wurde? :shock:
Das Problem war das die Software dann andauernd eine Messagebox mit eben diesem Fehler gebracht hat.
Poste den Quellcode nochmals von mir überarbeitet.


Delphi-Quellcode:
var MibRow: TMibIfRow;
IntfTable: PMibIfTable;
Size: DWORD;
I: Integer;
wert:integer;
begin
try
Size := 0;
if GetIfTable(nil, Size, True) <> ERROR_INSUFFICIENT_BUFFER then Exit;
  IntfTable := AllocMem(Size);
  try
    if GetIfTable(IntfTable, Size, True) = NO_ERROR then
    begin
      for I := 0 to IntfTable^.dwNumEntries - 1 do
      begin
     {$R-}MibRow := IntfTable.Table[I];{$R+}
        if MibRow.dwType <> MIB_IF_TYPE_ETHERNET then Continue; // oder MIB_IF_TYPE_PPP
       if i = 1 then begin // Welche Verbindung
       wert := MibRow.dwInOctets - old;
label1.caption := floattostr(round(Wert /1024 *100)/100) + ' KB/s';
old := MibRow.dwInOctets ;

end;
  end;
  end;
  except
  on erangeerror do
  begin
  timer1.Enabled:=false;
  showmessage('Ein Treiberproblem ist aufgetreten!Starten Sie den Computer neu.');
  end;
    end;

    finally
    FreeMem(IntfTable);
  end;
[edit=Admin]Code in Delphi-Tags gesetzt. :-) Mfg, Daniel[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:12 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz