我现获得当前网卡的网络速度要怎么作啊
解决方案 »
- Lysee 0.1.9.392 发布,请大家试用
- 再散200---祝大家天天开心!
- 我用 CreateFileMapping 创建了一段共享内存,但如何实现该内存对应链表结构
- 如何在access数据库中插入日期
- 如何得到随机字符串
- 请问哪里有可生成 AutoCAD 表和图形的 Delphi 控件?
- 在线求助!!!哪个大哥,大姐有关于ABC控件的资料介绍,给我一份好么,谢谢了!
- 请教高手 关于TRvsystem中预览的问题
- 关于fast report打印的问题,很奇怪,小妹急用,再线等待,多谢
- Spcomm3.0 Delphi2010安装成功,但发AT命令不成功。
- 如何使用AssignFile访问正在使用的 文本文件?
- 如何用代码强行断开数据库的所有连接?
可以编一个socket程序(服务器,客户端)然后,发一定大小(比如1K)的数据
试一下(可以使用CTime搞个定时器)。多试几次得到的平均值就差不多是平均网速了
http://search.csdn.net/Expert/topic/287/287518.xml?temp=.1123926
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.
另外一种简化的方法
///////////
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