CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  网络通信/分布式开发

1000分 求救! 绝不食言!!!再搞不定就要被炒了

楼主zeng_xh()2005-03-03 12:59:03 在 Delphi / 网络通信/分布式开发 提问

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

相关问题

  • 1000分,绝不食言。1000分,绝不食言。1000分,绝不食言。
  • 1000分,绝不食言。1000分,绝不食言。1000分,绝不食言。
  • 高分求解,绝不食言
  • quake sourcecode绝不食言,再次谢谢
  • 1000分!绝不食言!高手请进!
  • SQL Server菜鸟安装问题(奉送80分,绝不食言)
  • 硬盘问题说话就有分。绝不食言!!!!!!!!!!!
  • 谁帮我提前帖子我给谁分!绝不食言!
  • JavaScript的初级问题,80分请教,绝不食言!
  • 大虾快帮忙!分数不多,但绝不食言!

关键词

  • .net
  • 流量
  • statarr
  • sgmib
  • outpersec
  • mibarr
  • getonoffdatetime
  • activecountout
  • activecountin
  • inpersec

得分解答快速导航

  • 帖主:zeng_xh
  • redfeizhang
  • ly_liuyang
  • ly_liuyang
  • xwhope
  • constantine

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo