我现获得当前网卡的网络速度要怎么作啊

解决方案 »

  1.   

    (ZT)
    可以编一个socket程序(服务器,客户端)然后,发一定大小(比如1K)的数据
    试一下(可以使用CTime搞个定时器)。多试几次得到的平均值就差不多是平均网速了
    http://search.csdn.net/Expert/topic/287/287518.xml?temp=.1123926
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, StdCtrls, Buttons,
      iphlpapi;//注意这个头文件type
      TForm1 = class(TForm)
        Chart1: TChart;
        Timer1: TTimer;
        Series2: TLineSeries;
        Series1: TLineSeries;
        procedure getPacketCounts(VAR packetsIn, packetsOut: LongInt);
        procedure Timer1Timer(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;CONST
       MaxTime = 3*60; // 2 minutes
       MaxVal  = MaxTime;  // two reads per secondTYPE
      TifTable = Record
                 nRows   : LongInt;
                 ifRow   : Array[1..20] of MIB_IFROW;
                 end;
      Tdebug   = Array[0..$FF] of byte;VAR
      pIfTable           : ^TifTable;
      L : Record
          buffSize       : LongInt;
          IPboard        : LongInt;
          cCode          : LongInt;
          pIn, pOut      : LongInt;
          end;
      P : Integer;
      dataIn, dataOut : Array[0..MaxVal+1] of Integer;implementation{$R *.dfm}procedure TForm1.getPacketCounts(VAR packetsIn, packetsOut: LongInt);
    VAR
      xIn, xOut : LongInt;
    begin
       if (L.IPboard<=0) then exit;
       ZeroMemory(pIfTable, L.buffSize);   // get IP info
       L.cCode := GetIfTable(pIfTable, L.buffSize, 1);
       if L.cCode<>ERROR_SUCCESS then exit;   // get packet counts
       xIn  := pIfTable^.ifRow[L.IPboard].dwInOctets;
       xOut := pIfTable^.ifRow[L.IPboard].dwOutOctets;   // calc new packets
       packetsOut := xOut - L.pOut;  if packetsOut<0 then packetsOut := 0;
       packetsIn  := xIn - L.pIn;    if packetsIn<0  then packetsIn := 0;   // save new base
       L.pIn      := xIn;
       L.pOut     := xOut;end;procedure TForm1.Timer1Timer(Sender: TObject);
    Var
       i : Integer;
    begin
       // shift all values left
       if p>=MaxVal then begin
          Move(dataOut[1], dataOut[0], MaxVal*sizeOf(Integer));
          Move(dataIn[1],  dataIn[0],  MaxVal*sizeOf(Integer));
          end;
       // latest value
       getPacketCounts(dataIn[P], dataOut[P]);   // display all values
       for i := 0 to MaxVal do begin
           Chart1.SeriesList.Series[0].YValue[i] := dataOut[i];
           Chart1.SeriesList.Series[1].YValue[i] := dataIn[i];
           end;
       if p<MaxVal then inc(P);
    end;procedure TForm1.FormCreate(Sender: TObject);
    Var
       i : Integer;
    begin
       pIfTable := nil;
       ZeroMemory(@L,    sizeOf(L));   // request the size for the table to retrieve
       L.cCode := GetIfTable(pIfTable, L.buffSize, 1);
       if (L.buffSize<=0) or (L.buffSize>sizeOf(TifTable)) then begin
          ShowMessage('Cannot retrieve IP Info');
          Timer1.Enabled := false;
          end;   L.IPboard := -1;   // allocate memory 
       GetMem(pIfTable, L.buffSize);
       ZeroMemory(pIfTable, L.buffSize);   // retrieve the IP board info
       L.cCode := GetIfTable(pIfTable, L.buffSize, 1);
       if L.cCode=ERROR_SUCCESS then begin
          for i := 1 to pIfTable^.nRows do begin
              // locate an actual board (not the virtual loopback)
              if pIfTable^.ifRow[i].dwPhysAddrLen > 0 then begin
                 L.IPboard := i;
                 Chart1.Title.Text.Clear;
                 Chart1.Title.Text.Add('IP LAN Activity');
                 Chart1.Title.Text.Add(StrPas(@pIfTable^.ifRow[i].bDescr));
                 break;
                 end;
              end;
         end;   // initialize packet counts
       getPacketCounts(dataIn[P], dataOut[P]);   // initialize values
       for i := 0 to MaxVal do begin
           dataOut[i] := 0;
           dataIn[i]  := 0;
           Chart1.SeriesList.Series[0].Add(dataOut[i], '', clRed);
           Chart1.SeriesList.Series[1].Add(dataIn[i],  '', clGreen);
           end;   Timer1.Enabled := true;
       P := 0;
    end;end.
      

  3.   

    ====================================================
    另外一种简化的方法
    ///////////
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Psock, NMEcho, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        NMEcho1: TNMEcho;
        Edit1: TEdit;
        Label1: TLabel;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Memo1: TMemo;
        Timer1: TTimer;
        Edit2: TEdit;
        Label2: TLabel;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     NMEcho1.Host:=edit2.text;
    try
     NMEcho1.Connect;
    except
     //关闭任何异常
    end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      NMEcho1.Disconnect;
      timer1.enabled:=false;
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
    timer1.Enabled:=true;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
    memo1.Lines.Clear;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      memo1.lines.Clear;
      memo1.lines.add('发送:'+NMEcho1.Echo(Edit1.Text));
      memo1.lines.add('用时:'+FloatToStr(NMEcho1.ElapsedTime)+'毫秒');
    end;end.
    //可以使用ping方法,用ehco方法缺点是要有echo服务器
    //一定要先调用echo方法。
    //端口一般是7
      

  4.   

    提示iphlpapi.dcu找不到 ??咋整