1000分 求救! 绝不食言!!!再搞不定就要被炒了
adsl pppoe建立的adsl拨号连接
需要统计每6妙钟内的数据流量。搞了10天了,没搞定,最好哪位大大给个计算实例。(收到实例就给分)
能给个思路也给分。谢谢了!
问题点数:100、回复次数:37Top
1 楼yuvotesyg518(青出于蓝)回复于 2005-03-03 13:05:11 得分 0
汗……
帮你顶上去!Top
2 楼laiqinghe(生活就如它……)回复于 2005-03-03 13:19:57 得分 0
http://search.csdn.net/Expert/topic/1752/1752998.xml?temp=.5310938
http://search.csdn.net/Expert/topic/773/773348.xml?temp=.3567469
和你要求的不挨边
使劲帮你抗Top
3 楼zzlazio(sritsb)回复于 2005-03-03 13:31:13 得分 0
先MARK..回头看看Top
4 楼chinaandys(降龙十八炒&&蛋炒饭)回复于 2005-03-03 13:32:34 得分 0
upTop
5 楼zeng_xh()回复于 2005-03-03 13:33:33 得分 0
楼上的确实不是解决这个问题的
谢谢帮顶Top
6 楼laiqinghe(生活就如它……)回复于 2005-03-03 13:35:21 得分 0
在论坛里你搜索 ‘网络流量’ 你看看 我刚才搜了点但是不太懂 楼主自己看吧Top
7 楼xiejiye(菩提树业)回复于 2005-03-03 13:35:57 得分 0
下个软件,嵌套进去调用算了落Top
8 楼xthmpro_cn([可人])回复于 2005-03-03 13:36:30 得分 0
用代理统计。Top
9 楼caiso(十年磨一剑)回复于 2005-03-03 13:41:36 得分 0
顶一下Top
10 楼redfeizhang()回复于 2005-03-03 14:03:29 得分 10
SELECT 'fengzhong' = CASE WHEN datepart(mi, GETONOFFDATETIME)
<= 20 THEN '0-20' WHEN datepart(mi, GETONOFFDATETIME) >20 AND datepart(mi,
GETONOFFDATETIME) <= 40 THEN '21-40' WHEN datepart(mi, GETONOFFDATETIME)
> 40 AND datepart(mi, GETONOFFDATETIME) <=60 THEN '41-60' END, RouteCode,
RIGHT(BUSCODE, 4) AS Expr1, LEFT(CONVERT(char(20), GETONOFFDATETIME, 20),
13) AS Expr4, SUM(PAYMENTAMOUNTPOINT) AS Expr2, COUNT(*) AS Expr3
FROM dbo.query_001
GROUP BY ROUTECODE, RIGHT(BUSCODE, 4), CASE WHEN datepart(mi,
GETONOFFDATETIME) <= 20 THEN '0-20' WHEN datepart(mi, GETONOFFDATETIME)
> 20 AND datepart(mi, GETONOFFDATETIME) <= 40 THEN '21-40'
WHEN datepart(mi, GETONOFFDATETIME) > 40 AND datepart(mi,
GETONOFFDATETIME) <=60 THEN '41-60'
END, LEFT(CONVERT(char(20), GETONOFFDATETIME, 20), 13) order by expr4
Top
11 楼redfeizhang()回复于 2005-03-03 14:05:34 得分 0
者是20 每 分鐘的程序,給你個參考
Top
12 楼redfeizhang()回复于 2005-03-03 14:05:48 得分 0
者是 每20 分鐘的程序,給你個參考
Top
13 楼ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)回复于 2005-03-03 14:16:45 得分 20
呵呵
用IPHelper来处理是可以的
关键代码
// statistics data for each interface
TStatistics = record
dwInterfaceIndex: DWORD;
ActiveCountIn, { count of samples where something was received }
ActiveCountOut, { count of samples where something was sent }
PrevCountIn, { previous byte count in }
PrevCountOut, { previous byte count out}
TotalIn, { total byte count in }
TotalOut, { total byte count out }
InPerSec, { byte count in of last sample period }
OutPerSec, { byte count out of last sample period }
PeakInPerSec, { peak byte count in/out }
PeakOutPerSec : DWORD;
end;
TStatArr = array of TStatistics;
var
IPForm : TIPForm;
StatArr : TStatArr;
implementation
{$R *.DFM}
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
procedure TIPForm.FormCreate( Sender: TObject );
begin
Caption := Caption + ' ' + Version;
// grid headers...
sgMib.Cells[0,0] := 'adapter description';
sgMib.Cells[1,0] := 'MAC-address';
sgMIB.Cells[2,0] := 'IP-Address';
sgMIB.Cells[3,0] := 'oct/sec in';
sgMIB.Cells[4,0] := 'peak in/sec';
sgMIB.Cells[5,0] := 'avg.in/sec';
sgMIB.Cells[6,0] := 'oct/sec out';
sgMIB.Cells[7,0] := 'peak out/sec';
sgMIB.Cells[8,0] := 'avg.out/sec';
(*
***do not change: all calculations
are based on a sample interval of =1= second***
*)
Timer1.Interval := 1000;
CaptureMIBData( true );
end;
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
procedure TIPForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Timer1.OnTimer := nil;
Action := caFREE;
end;
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
procedure TIPForm.btnQuitClick(Sender: TObject);
begin
Close;
end;
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
procedure TIPForm.cbOnTopClick(Sender: TObject);
begin
if cbOnTop.Checked = true then
FormStyle := fsSTAYONTOP
else
FormStyle := fsNORMAL;
end;
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
procedure TIPForm.Timer1Timer( Sender: TObject );
begin
Timer1.Enabled := false;
CaptureMIBData( false );
Timer1.Enabled := true;
end;
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
procedure TIPForm.btnStartCapClick(Sender: TObject);
begin
btnStartCap.Enabled := false;
btnStopCap.Enabled := true;
ClearCounters;
Timer1.Enabled := true;
end;
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
procedure TIPForm.btnStopCapClick(Sender: TObject);
begin
btnStartCap.Enabled := true;
btnStopCap.Enabled := false;;
Timer1.Enabled := false;
end;
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
procedure TIPForm.btnClearClick(Sender: TObject);
begin
ClearCounters;
end;
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
// get MIB data and init or show data
procedure TIPForm.CaptureMIBData( InitFlag: boolean );
var
MibArr : IpHlpAPI.TMIBIfArray;
begin
Get_IfTableMIB( MibArr ); // get current MIB data
if InitFlag then
InitGrid( MibArr ) // initialise grid & counters
else
Data2Grid( MibArr ); // show data
end;
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
procedure TIPForm.ClearCounters;
begin
CaptureMIBData( true );
CaptureMIBData( false);
end;
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
procedure TIPForm.Data2Grid( MIBArr: IpHlpAPI.TMIBIFArray );
var
i : integer;
begin
for i := low(MIBArr) to High(MIBArr) do
with MIBArr[i] do
begin
with StatArr[i] do
begin
InPerSec := dwInOctets - PrevCountIn;
inc(TotalIn, InPerSec);
if InPerSec > 0 then
inc(ActivecountIn);
PrevCountIn := dwInOctets;
//
OutPerSec := dwOutOctets - PrevCountOut;
inc(TotalOut,OutPerSec);
if OutPerSec > 0 then
inc(ActivecountOut);
PrevCountOut := dwOutOctets;
// peak values
if InPerSec > PeakInPerSec then
PeakInPersec := InPersec;
if OutPerSec > PeakOutPerSec then
PeakOutPerSec := OutPerSec;
// update grid
sgMIB.Cells[3, i+1] := IntToStr( InPerSec) ;
sgMIB.Cells[4, i+1] := IntToStr( PeakInPerSec ) ;
if ActiveCountIn > 0 then
sgMIB.Cells[5, i+1] := IntToStr( TotalIn div ActiveCountIn)
else
sgMIB.Cells[5, i+1] := ' -- ';
sgMIB.Cells[6, i+1] := IntToStr( OutPerSec) ;
sgMIB.Cells[7, i+1] := IntToStr( PeakOutPerSec) ;
if ActiveCountOut > 0 then
sgMIB.Cells[8, i+1] := IntToStr( TotalOut div ActiveCountOut)
else
sgMIB.Cells[8, i+1] := ' -- ';
end;
end;
end;
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
function TIPForm.GetIPFromIFIndex( InterfaceIndex: integer ): string;
var
i: integer;
IPArr : TMIBIPAddrArray;
begin
Result := '!not_found!'; // shouldn't happen...
Get_IPAddrTableMIB( IpArr ); // get IP-address table
if Length(IPArr) > 0 then
for i := low(IPArr) to High(IPArr) do // look for matching index...
if IPArr[i].dwIndex = InterfaceIndex then
begin
Result := IPAddr2Str(IParr[i].dwAddr);
BREAK;
end;
end;
Top
14 楼ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)回复于 2005-03-03 14:17:09 得分 20
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
// initialise stat variables & grid
procedure TIpForm.InitGrid( MibArr: IpHlpAPI.TMibIFArray );
var
i : integer;
IPArr : TMibIPAddrArray;
Descr: string;
begin
if Length(MibArr) > 0 then
begin
sgMib.RowCount := succ(Length( MibArr ));
SetLength( StatArr, Length(MibArr));
for i := low(MIBArr) to High(MIBArr) do
with MIBArr[i] do
begin
StatArr[i].ActiveCountIn := 0;
StatArr[i].ActiveCountOut:= 0;
StatArr[i].PrevCountIn := dwInOctets;
StatArr[i].PrevCountOut:= dwOutOctets;
StatArr[i].TotalIn := 0;
StatArr[i].TotalOut:= 0;
StatArr[i].InPerSec:= 0;
StatArr[i].OutPerSec:= 0;
StatArr[i].PeakInPerSec := 0;
StatArr[i].PeakOutPerSec:=0;
SetLength( Descr, pred(dwDescrLen));
move(bDescr, Descr[1], pred(dwDescrLen));
// adapter description
sgMIB.Cells[0, succ(i)] := Trim(Descr) ;
// adapter MAC address
sgMIB.Cells[1, succ(i)] := MacAddr2Str( TMacAddress( bPhysAddr ), dwPhysAddrLen );
// adapter IP address
sgMIB.Cells[2, succ(i)] := GetIPFromIFIndex( MIBArr[i].dwIndex);
//
end;
end;
end;
(*
version history
---------------
2.0
---
add: mean in/out values
add: stayinfront
add: minor cosmetic changes
*)
end.
http://lysoft.7u7.netTop
15 楼lanwu85()回复于 2005-03-03 14:24:52 得分 0
都蛮强的,我要多学习学习!Top
16 楼unsigned(僵哥(发站内消息,请附上链接或问题说明,否则不予回复))回复于 2005-03-03 14:25:27 得分 0
http://www.helpdrivers.com/ingles/listado/panel.asp?marca=ITeX&perif=modemsTop
17 楼gselec(海宏)回复于 2005-03-03 14:38:02 得分 0
书店有一本书,讲2000和XP可以底层操作获取传输字节数,好像叫《Delphi网络编程实例开发》,我那里还有本。Top
18 楼whbo(王红波(年轻人,要有所作为))回复于 2005-03-03 14:40:59 得分 0
搜索局域网,网络流量Top
19 楼zeng_xh()回复于 2005-03-03 14:54:46 得分 0
谢谢朋友们,我先试验,搞定马上发分!Top
20 楼duxin(小伍)回复于 2005-03-03 15:10:23 得分 0
第一 注册表中有个字段记录有那几个端口正在用 这个很确定
第二 是否有函数记录各个端口流量 最后相加Top
21 楼merkey2002(小样的)回复于 2005-03-03 15:21:26 得分 0
不会,祝你早日搞定~Top
22 楼xwhope(烟火)回复于 2005-03-03 16:10:15 得分 20
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
// initialise stat variables & grid
procedure TIpForm.InitGrid( MibArr: IpHlpAPI.TMibIFArray );
var
i : integer;
IPArr : TMibIPAddrArray;
Descr: string;
begin
if Length(MibArr) > 0 then
begin
sgMib.RowCount := succ(Length( MibArr ));
SetLength( StatArr, Length(MibArr));
for i := low(MIBArr) to High(MIBArr) do
with MIBArr[i] do
begin
StatArr[i].ActiveCountIn := 0;
StatArr[i].ActiveCountOut:= 0;
StatArr[i].PrevCountIn := dwInOctets;
StatArr[i].PrevCountOut:= dwOutOctets;
StatArr[i].TotalIn := 0;
StatArr[i].TotalOut:= 0;
StatArr[i].InPerSec:= 0;
StatArr[i].OutPerSec:= 0;
StatArr[i].PeakInPerSec := 0;
StatArr[i].PeakOutPerSec:=0;
SetLength( Descr, pred(dwDescrLen));
move(bDescr, Descr[1], pred(dwDescrLen));
// adapter description
sgMIB.Cells[0, succ(i)] := Trim(Descr) ;
// adapter MAC address
sgMIB.Cells[1, succ(i)] := MacAddr2Str( TMacAddress( bPhysAddr ), dwPhysAddrLen );
// adapter IP address
sgMIB.Cells[2, succ(i)] := GetIPFromIFIndex( MIBArr[i].dwIndex);
//
end;
end;
end;
(*
version history
---------------
2.0
---
add: mean in/out values
add: stayinfront
add: minor cosmetic changes
*)
end.
http://lysoft.7u7.net
Top
23 楼halfdream(哈欠)回复于 2005-03-03 16:12:00 得分 0
关注。。
Top
24 楼cyf_delphi(风一样)回复于 2005-03-03 16:19:46 得分 0
关注Top
25 楼kuki84(天道酬勤)回复于 2005-03-03 22:13:22 得分 0
祝福!Top
26 楼sheepchang(一曲肝肠断,天涯何处觅知音。)回复于 2005-03-04 02:48:40 得分 0
关注Top
27 楼jellypillar(新型人类)回复于 2005-03-04 07:54:48 得分 0
关注+学习+UpTop
28 楼caiso(十年磨一剑)回复于 2005-03-04 08:33:26 得分 0
顶一下Top
29 楼78hgdong(赤脚)回复于 2005-03-04 08:35:41 得分 0
9999Top
30 楼constantine(飘遥的安吉儿)回复于 2005-03-04 08:39:02 得分 30
unit uNetMon;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, IPHelper, IPHLPAPI, StdCtrls, ComCtrls, Buttons, Grids;
const
version = '1.0';
type
TIPForm = class( TForm )
Timer1: TTimer;
GroupBox1: TGroupBox;
btnQuit: TSpeedButton;
cbOnTop: TCheckBox;
btnClear: TSpeedButton;
btnStopCap: TSpeedButton;
btnStartCap: TSpeedButton;
sgMIB: TStringGrid;
procedure Timer1Timer( Sender: TObject );
procedure FormCreate( Sender: TObject );
procedure btnStartCapClick(Sender: TObject);
procedure btnStopCapClick(Sender: TObject);
procedure btnClearClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure cbOnTopClick(Sender: TObject);
procedure btnQuitClick(Sender: TObject);
private
{ Private declarations }
function GetIPFromIFIndex( InterfaceIndex: integer ): string;
procedure InitGrid( MibArr: IpHlpAPI.TMibIFArray );
procedure CaptureMIBData( InitFlag: boolean );
procedure ClearCounters;
procedure Data2Grid( MIBArr: IpHlpAPI.TMIBIFArray );
public
{ Public declarations }
end;
//用于统计数据结构
TStatistics = record
dwInterfaceIndex: DWORD;
ActiveCountIn, {当前流入的数据量}
ActiveCountOut, {当前流出的数据量}
PrevCountIn, {前次流入的数据量}
PrevCountOut, {前次流出的数据量}
TotalIn, {总的流入数据量}
TotalOut, {总的流出数据量}
InPerSec, {最后一次统计的流入速度}
OutPerSec, {最后一次统计的流出速度}
PeakInPerSec, {最高的流入流出速度}
PeakOutPerSec : DWORD;
end;
TStatArr = array of TStatistics;
var
IPForm : TIPForm;
StatArr : TStatArr;
implementation
{$R *.DFM}
//初始化
procedure TIPForm.FormCreate( Sender: TObject );
begin
Caption := Caption + ' ' + Version;
sgMib.Cells[0,0] := '网卡信息';
sgMib.Cells[1,0] := 'MAC地址';
sgMIB.Cells[2,0] := 'IP地址';
sgMIB.Cells[3,0] := '流入(byte/s)';
sgMIB.Cells[4,0] := '最高(in/s)';
sgMIB.Cells[5,0] := '平均(in/s)';
sgMIB.Cells[6,0] := '流出(oct/s)';
sgMIB.Cells[7,0] := '最高(byte/s)';
sgMIB.Cells[8,0] := '平均(out/s)';
//设置统计间隔为1秒
Timer1.Interval := 1000;
CaptureMIBData( true );
end;
//关闭窗口,释放资源
procedure TIPForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Timer1.OnTimer := nil;
Action := caFREE;
end;
procedure TIPForm.btnQuitClick(Sender: TObject);
begin
Close;
end;
//使窗口处于最上层
procedure TIPForm.cbOnTopClick(Sender: TObject);
begin
if cbOnTop.Checked = true then
FormStyle := fsSTAYONTOP
else
FormStyle := fsNORMAL;
end;
//使用定时器统计
procedure TIPForm.Timer1Timer( Sender: TObject );
begin
Timer1.Enabled := false;
CaptureMIBData( false );
Timer1.Enabled := true;
end;
//统计开始
procedure TIPForm.btnStartCapClick(Sender: TObject);
begin
btnStartCap.Enabled := false;
btnStopCap.Enabled := true;
ClearCounters;
Timer1.Enabled := true;
end;
//统计停止
procedure TIPForm.btnStopCapClick(Sender: TObject);
begin
btnStartCap.Enabled := true;
btnStopCap.Enabled := false;;
Timer1.Enabled := false;
end;
//清除统计
procedure TIPForm.btnClearClick(Sender: TObject);
begin
ClearCounters;
end;
//取得MIB结构的数据并初始化或显示统计
procedure TIPForm.CaptureMIBData( InitFlag: boolean );
var
MibArr : IpHlpAPI.TMIBIfArray;
begin
Get_IfTableMIB( MibArr );
if InitFlag then
InitGrid( MibArr )
else
Data2Grid( MibArr );
end;
//清除统计数据
procedure TIPForm.ClearCounters;
begin
CaptureMIBData( true );
CaptureMIBData( false);
end;
//根据取得的信息设置表格显示信息
procedure TIPForm.Data2Grid( MIBArr: IpHlpAPI.TMIBIFArray );
var
i : integer;
begin
for i := low(MIBArr) to High(MIBArr) do
with MIBArr[i] do
begin
with StatArr[i] do
begin
InPerSec := dwInOctets - PrevCountIn;
inc(TotalIn, InPerSec);
if InPerSec > 0 then
inc(ActivecountIn);
PrevCountIn := dwInOctets;
OutPerSec := dwOutOctets - PrevCountOut;
inc(TotalOut,OutPerSec);
if OutPerSec > 0 then
inc(ActivecountOut);
PrevCountOut := dwOutOctets;
if InPerSec > PeakInPerSec then
PeakInPersec := InPersec;
if OutPerSec > PeakOutPerSec then
PeakOutPerSec := OutPerSec;
//更新表格显示
sgMIB.Cells[3, i+1] := IntToStr( InPerSec) ;
sgMIB.Cells[4, i+1] := IntToStr( PeakInPerSec ) ;
if ActiveCountIn > 0 then
sgMIB.Cells[5, i+1] :=
IntToStr( TotalIn div ActiveCountIn)
else
sgMIB.Cells[5, i+1] := ' -- ';
sgMIB.Cells[6, i+1] := IntToStr( OutPerSec) ;
sgMIB.Cells[7, i+1] := IntToStr( PeakOutPerSec) ;
if ActiveCountOut > 0 then
sgMIB.Cells[8, i+1] :=
IntToStr( TotalOut div ActiveCountOut)
else
sgMIB.Cells[8, i+1] := ' -- ';
end;
end;
end;
//根据序号从列表中取得IP地址
function TIPForm.GetIPFromIFIndex( InterfaceIndex: integer ): string;
var
i: integer;
IPArr : TMIBIPAddrArray;
begin
Result := '!not_found!';
Get_IPAddrTableMIB( IpArr );
if Length(IPArr) > 0 then
for i := low(IPArr) to High(IPArr) do
if IPArr[i].dwIndex = InterfaceIndex then
begin
Result := IPAddr2Str(IParr[i].dwAddr);
BREAK;
end;
end;
//初始化统计变量与表格
procedure TIpForm.InitGrid( MibArr: IpHlpAPI.TMibIFArray );
var
i : integer;
IPArr : TMibIPAddrArray;
Descr: string;
begin
if Length(MibArr) > 0 then
begin
sgMib.RowCount := succ(Length( MibArr ));
SetLength( StatArr, Length(MibArr));
for i := low(MIBArr) to High(MIBArr) do
with MIBArr[i] do
begin
StatArr[i].ActiveCountIn := 0;
StatArr[i].ActiveCountOut:= 0;
StatArr[i].PrevCountIn := dwInOctets;
StatArr[i].PrevCountOut:= dwOutOctets;
StatArr[i].TotalIn := 0;
StatArr[i].TotalOut:= 0;
StatArr[i].InPerSec:= 0;
StatArr[i].OutPerSec:= 0;
StatArr[i].PeakInPerSec := 0;
StatArr[i].PeakOutPerSec:=0;
SetLength( Descr, pred(dwDescrLen));
move(bDescr, Descr[1], pred(dwDescrLen));
//网卡描述信息
sgMIB.Cells[0, succ(i)] := Trim(Descr) ;
//网卡MAC地址
sgMIB.Cells[1, succ(i)] := MacAddr2Str( TMacAddress( bPhysAddr ), dwPhysAddrLen );
//网卡IP地址
sgMIB.Cells[2, succ(i)] := GetIPFromIFIndex( MIBArr[i].dwIndex);
end;
end;
end;
end.
Top
31 楼constantine(飘遥的安吉儿)回复于 2005-03-04 08:40:53 得分 0
其他两个文件太大了贴不了
你将你的email发短信给我,最好不要放这里,我怕看不到
代码统计的每秒的,你要改一下Top
32 楼caiso(十年磨一剑)回复于 2005-03-04 09:33:33 得分 0
顶一下Top
33 楼xzsnj(中文2005版)回复于 2005-03-04 09:46:21 得分 0
是很厉害,我看得直晕!可能是我没有搞过这一块!Top
34 楼ermao998(二毛)回复于 2005-03-04 10:04:49 得分 0
帮你顶了Top
35 楼212038(磐石)回复于 2005-03-04 10:12:34 得分 0
佩服!Top
36 楼foxqiu()回复于 2005-03-04 16:03:49 得分 0
搞定了吗?关注中。。。Top
37 楼huawenxue(文学)回复于 2005-03-04 17:57:57 得分 0
真不知道你的运气怎么样了Top




