zoukankan      html  css  js  c++  java
  • vb 验证网络

    引用:http://school.cfan.com.cn/soft/sys/2006-08-18/1155878337d13185.shtml

      

    前言
    常言道,攘外必先安内,服务器的正常运作,是开展一切工作的基础。而在网络安全问题日益凸现的今天,监控服务器的健康状况成了管理人员的必修课。然而,通过手工操作效率过于低下。想到骇客帝国中帅呆了的Agent史密斯,其本质就是一个高级的软件机器人,那么我们能不能编写一套程序,让程序就像Agent史密斯一样自动去监视服务器的健康状况,一旦发现问题就自动通知我们呢?
    要编写这么一个软件机器人,我们只要通过程序定时测试网站是否正常运行即可。其实原理并不复杂,因为用Inet控件去抓取一个Url地址时,如果地址是无法访问的,Inet控件所返回的值的长度是0。如果用循环和数组,程序还能同时监测多个网址。此外,还可以用Dir函数、Windows Script Host对象等实现从收藏夹中导入链接,使软件操作更加友善。
    程序设计
    以下便是笔者用Visual Basic 6编写的网站监视软件。程序需要5个按钮,作用分别是:开始监视、结束监视、添加Text1中的网址至监视列表、从监视列表中移除网址和从收藏夹列表中添加网址到监视列表;一个Inet控件(需要从工程-部件中选择),RequestTimeout设置为15(请依据个人网速设置,建议大于15);三个Listbox分别为:记录监视记录、待监视网址列表、显示收藏夹中的链接列表;两个Text框分别为:用户输入网址、显示List2中选中网址的监视信息;一个Timer控件,Enabled设置为False,Interval设置为1000。
    篇幅限制,下面只列出核心代码:
    Private Sub Form_Load()  'Form加载时读取收藏夹中的链接
    Dim sA As String * 65400
    Dim sfile As String
    Dim fpath As New IWshRuntimeLibrary.WshShell
    sfile = Dir(fpath.SpecialFolders("FAVORITES") & "\") '用Windows Script Host对象获得当前收藏夹位置
    Do While Not Len(sfile) = 0
    If UCase(Right(sfile, 4)) = ".URL" Then
    Open fpath.SpecialFolders("FAVORITES") & "\" & sfile For Binary As #1 '注释:用二进制打开文件
    Get #1, , sA '注释:用Get语句从文件中获取字节
    xz = Split(sA, Chr(10))  '以回车作为标志分割URL中文本
    For i = 0 To UBound(xz)
    If UCase(Left(xz(i), 4)) = "URL=" Then  '符合格式时得到Url
    List3.AddItem Right(xz(i), Len(xz(i)) - 4)
    End If
    Next i
    Close #1 '注释:关闭文件
    End If
    sfile = Dir
    Loop
    End Sub

    Private Sub Timer1_Timer() '启动监视的时候Timer执行
    On Error Resume Next  '先忽略一切错误,为了能够让程序执行下去
    If Inet1.StillExecuting Then Inet1.Cancel
    For i = 0 To List2.ListCount - 1 '循环次数等于列表中待监测链接数
    val = 0
    val = Len(Inet1.OpenURL(List2.List(i)))   '网址返回的长度
    If val = 0 Then     'Inet返回值的长度为零,则记录无法访问
    List1.AddItem (Now & Space(6) & List2.List(i) & Space(6) & "×")
    c2(i) = c2(i) + 1   '不能访问计数+1
    Else
    List1.AddItem (Now & Space(6) & List2.List(i) & Space(6) & "√") '反之,记录可以访问
    c1(i) = c1(i) + 1   '能访问计数+1
    End If
    Next i
    List1.AddItem Chr(10)
    If List2.SelCount > 0 Then    '在Text2中显示监测结果
    Text2.Text = "当前统计信息:" & Chr(10) & List2.List(List2.ListIndex) & Space(6) & "正常访问:" & c1(List2.ListIndex) & "次" & Space(6) & "不能访问:" & c2(List2.ListIndex) & "次"
    End If
    End Sub
    注意到本文通过Timer控件与Inet控件的结合非常巧妙地模仿了多线程的机制,程序反应速度非常快,如图所示就是程序运行的界面。

    需要注意的是,不同网站访问速度不同,按本文方法,只有被测网址在Inet的RequestTimeout时间内刷新完才记录正常访问,如果网速过慢,需加大RequestTimeout的值(只要不要超过Timer的Interval时间),否则软件机器人会出现误报。
    后记
    本文通过VB自带的Inet控件以及简单的循环便实现了一个非常实用的软件机器人,服务器的任何问题都逃不过它的眼睛。如果对于Inet控件返回的内容加以判断,还可以开发出能够监视网络连载故事是否更新的软件机器人。此外,验证自己购买的虚拟主机是否真的有如广告说的那样不间断服务,对于我们的软件机器人而言,绝对是小菜一碟。
    本程序在VB6.0、Windows XP联网状态下调试通过。完整的源代码可以从http://www.cfan.com.cn/11program/200514/agent.zip下载

  • 相关阅读:
    目录拷贝
    获取当前时间
    获取当前目录名称
    WPF 修改数据后更新UI
    外网访问FTP服务,解决只能以POST模式访问Filezilla的问题
    解决Postgresql服务启动又关闭的问题
    更换PostgreSql的data文件夹并重新服务器(此方法同样适用于系统崩溃后,找回数据的操作)
    C#一键显示及杀死占用端口号进程
    [WP8开发] WinJS中winControl或者itemDataSource值为null的解决方案
    [WP8开发] WebBrowser控件与后台代码.cs简单的交互
  • 原文地址:https://www.cnblogs.com/sode/p/2280357.html
Copyright © 2011-2022 走看看