adsl pppoe建立的adsl拨号连接需要统计每6妙钟内的数据流量。搞了10天了,没搞定,最好哪位大大给个计算实例。(收到实例就给分)能给个思路也给分。谢谢了!

解决方案 »

  1.   

    http://search.csdn.net/Expert/topic/1752/1752998.xml?temp=.5310938http://search.csdn.net/Expert/topic/773/773348.xml?temp=.3567469和你要求的不挨边
    使劲帮你抗
      

  2.   

    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
      

  3.   

    呵呵
    用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;
      

  4.   

    //* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
    // 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
      

  5.   

    http://www.helpdrivers.com/ingles/listado/panel.asp?marca=ITeX&perif=modems
      

  6.   

    书店有一本书,讲2000和XP可以底层操作获取传输字节数,好像叫《Delphi网络编程实例开发》,我那里还有本。
      

  7.   

    //* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
    // 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
      

  8.   

    unit uNetMon;interfaceuses
      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.
      

  9.   

    其他两个文件太大了贴不了
    你将你的email发短信给我,最好不要放这里,我怕看不到
    代码统计的每秒的,你要改一下