您的位置:首页 > 理论基础 > 计算机网络

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

2006-12-20 13:30 861 查看
※==================================================================
※本连载文章说明:
※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、程序运行截图
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐