在vb中使用Iphlpapi.dll获取网络信息 第四章 第三节 实例一:网络数据流量图

※==================================================================
※本连载文章说明:
※1、连载首发于《软件报》(http://www.sweek.com)2006年21期(2006年5月22日);
※2、此次网上连载采用的是原稿件结构,内容与《软件报》发表略有不同;
※3、谢绝除《软件报》及其相关刊物之外的传统媒体部分或全部转载;
※4、谢绝任何收费媒体、网络转载;
※5、原作者:uruseibest ,blog:http://blog.csdn.net/uruseibest
※6、如有其它疑问,请联系作者;
※7、如有转载,必须连同本说明一并发表,否则将追究转载者责任。
※======================================================================

第三节 实例一:网络数据流量图

    在第二章第二节介绍了GetIfTable函数,通过这个函数可以获得总共收到和发出的数据字节数等信息。比较前后两次总共收到与发出的数据大小以及之间的时间,就可以获得当前网络传输数据的速率。

1、程序设置

一个Picture控件,width=5000;height=2000

Picture控件中设置一个Shape控件,index=0,背景色为红色

一个Timer控件,Interval=1000

两个按钮,caption分别为“开始”、“停止”

其余为Label控件,记录当前接收的数据字节、当前发送的数据字节、当前的传输速率,最大传输速率。

2、程序思路

设置Timer. Interval=1000,每隔一秒调用一次函数GetIfTable,获取一次数据。前后两次数据的差就是一秒内传输数据的大小。使用一组Shape控件构成柱状图来表示当前的数据流量。设置Picture的宽度为5000,相应的设置Shape控件的宽度为100,这样可以在图上显示50个shape控件,表示了50秒的网络数据流量状况。Shape控件的高度为当前网络数据流量大小(1=1k,此程序中最大显示为2M)。

3、主要代码(函数、类型说明请参看第二章第二节)

①公用变量:

Dim TotelRecv As Long        ‘当前接收的数据字节

Dim TotelSend As Long        ‘当前发送的数据字节

Dim LastRecv As Long         ‘之前接收的数据字节

Dim LastSend As Long         ‘之前发送的数据字节

Dim CurStream As Double    ‘当前的传输速率

Dim MaxStream As Double   ‘最大传输速率

Dim NewArray(49) As Long  ‘Shape控件的高度

②窗体载入时:

Timer1.Enabled = False               ‘不允许Timer控件运行

LastRecv = 0: LastSend = 0         ‘设置之前接收、发送的数据字节

CurStream = 0: MaxStream = 0    ‘设置当前的传输速率、最大传输速率

For i = 0 To 49                           ‘设置Shape控件的初始高度

    NewArray(i) = 0

Next

For i = 1 To 49                           ‘载入Shape控件

    Load Shape(i)

Next

For i = 0 To 49                           ‘设置Shape控件

    Shape(i).Width = 100                          ‘宽度

    Shape(i).Height = NewArray(i)            ‘高度

    Shape(i).Top = 2000 - NewArray(i)     ‘与容器顶端的距离

    Shape(i).Left = (49 - i) * 100                     ‘与容器左端的距离

    Shape(i).Visible = True                       ‘可见

Next

③按下“开始”按钮:

TotelRecv = 0: TotelSend = 0        ‘设置当前接收、发送的数据字节

LenIfT = Len(ifT)

rvalue = GetIfTable(ifT, LenIfT, True)  ‘调用函数GetIfTable

For i = 0 To ifT.dwNumEntries – 1             ‘枚举每个网卡

    If ifT.MIB_Table(i).dwType = 6 Then         ‘只对以太网卡类型进行统计

        TotelRecv = TotelRecv + ifT.MIB_Table(i).dwInOctets      ‘当前接收的数据字节

        TotelSend = TotelSend + ifT.MIB_Table(i).dwOutOctets    ‘当前发送的数据字节

    End If

Next

CurStream = Format(CDbl(TotelRecv + TotelSend - LastRecv - LastSend) / (CDbl(1024)), "0000.00")         ‘当前流量为当前接收和发送数据大小减去之前接收和发送数据大小。这里获得的实际仅为当前接收和发送数据大小,不显示。

LastRecv = TotelRecv: LastSend = TotelSend      ‘设置之前接收、发送的数据字节

Timer1.Enabled = True         ‘允许Timer控件运行,开始正式进行数据统计

Command1.Enabled = False: Command2.Enabled = True

④Timer控件启动:

TotelRecv = 0: TotelSend = 0       

LenIfT = Len(ifT)

rvalue = GetIfTable(ifT, LenIfT, True) 

For i = 0 To ifT.dwNumEntries – 1            

           If ifT.MIB_Table(i).dwType = 6 Then

               TotelRecv = TotelRecv + ifT.MIB_Table(i).dwInOctets

               TotelSend = TotelSend + ifT.MIB_Table(i).dwOutOctets

           End If

Next

LabelInfo1.Caption = TotelRecv           ‘显示当前接收的数据字节

LabelInfo2.Caption = TotelSend           ‘显示当前发送的数据字节

If LastRecv <> 0 And LastSend <> 0 Then

           CurStream = Format(CDbl(TotelRecv + TotelSend - LastRecv - LastSend) / (CDbl(1024)), "0000.00")

           For i = 49 To 1 Step -1                ‘设置Shape控件的高度

               NewArray(i) = NewArray(i - 1)

           Next

           NewArray(0) = CLng(CurStream)

           Call DrawStream                         ‘显示柱状图

End If

LabelInfo3.Caption = CurStream          ‘当前的传输速率

If CurStream > MaxStream Then         ‘设置最大传输速率

            MaxStream = CurStream

           LabelInfo4.Caption = MaxStream

End If

LastRecv = TotelRecv: LastSend = TotelSend      ‘设置之前接收、发送的数据字节

⑤绘制柱状图

Private Sub DrawStream()

For i = 0 To 49

    Shape(i).Top = 2000 - NewArray(i)      ‘Shape控件的顶端距

    Shape(i).Height = NewArray(i)            ‘Shape控件的高度

Next

End Sub

 

4、程序运行截图

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/UruseiBest/archive/2006/12/20/1450412.aspx

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值