Visual Basic-Ping!

Ping!是Ping命令的GUI版本,用一个简单的窗口显示是否可以Ping的通。

如果我们应用DOS的Ping。。。

总感觉怪怪的,那么,GUI版本的Ping来了,虽然功能简单,只是入门级的检查是否Ping的通,但对于不需要具体情况的我们,足够了吧。

Ping!版本v1.1 

                   

下载地址:Ping!

开源的说:

Form源码:

Option Explicit
 'Copyright (c) 2014,烟台大学计算机学院
 'All gight reserved.
 '文件名称:temp.cpp
 '作者:邵帅
 '完成时间:2014年12月19日
 '版本号:v1.1
Private Sub Command1_Click()
Dim ipctr As String
ipctr = Text1.Text
If PingIP(ipctr) Then
        MsgBox ":-) 可以ping通。", , "状态"
    Else
        MsgBox ":-( ping不通。", , "状态"
    End If
End Sub

Private Sub Form_Load()

End Sub

模块源码:

Option Explicit
 'Copyright (c) 2014,烟台大学计算机学院
 'All gight reserved.
 '文件名称:temp.cpp
 '作者:邵帅
 '完成时间:2014年12月19日
 '版本号:v1.1
Private Const IP_SUCCESS As Long = 0
Private Const IP_STATUS_BASE As Long = 11000
Private Const IP_BUF_TOO_SMALL As Long = (11000 + 1)
Private Const IP_DEST_NET_UNREACHABLE As Long = (11000 + 2)
Private Const IP_DEST_HOST_UNREACHABLE As Long = (11000 + 3)
Private Const IP_DEST_PROT_UNREACHABLE As Long = (11000 + 4)
Private Const IP_DEST_PORT_UNREACHABLE As Long = (11000 + 5)
Private Const IP_NO_RESOURCES As Long = (11000 + 6)
Private Const IP_BAD_OPTION As Long = (11000 + 7)
Private Const IP_HW_ERROR As Long = (11000 + 8)
Private Const IP_PACKET_TOO_BIG As Long = (11000 + 9)
Private Const IP_REQ_TIMED_OUT As Long = (11000 + 10)
Private Const IP_BAD_REQ As Long = (11000 + 11)
Private Const IP_BAD_ROUTE As Long = (11000 + 12)
Private Const IP_TTL_EXPIRED_TRANSIT As Long = (11000 + 13)
Private Const IP_TTL_EXPIRED_REASSEM As Long = (11000 + 14)
Private Const IP_PARAM_PROBLEM As Long = (11000 + 15)
Private Const IP_SOURCE_QUENCH As Long = (11000 + 16)
Private Const IP_OPTION_TOO_BIG As Long = (11000 + 17)
Private Const IP_BAD_DESTINATION As Long = (11000 + 18)
Private Const IP_ADDR_DELETED As Long = (11000 + 19)
Private Const IP_SPEC_MTU_CHANGE As Long = (11000 + 20)
Private Const IP_MTU_CHANGE As Long = (11000 + 21)
Private Const IP_UNLOAD As Long = (11000 + 22)
Private Const IP_ADDR_ADDED As Long = (11000 + 23)
Private Const IP_GENERAL_FAILURE As Long = (11000 + 50)
Private Const MAX_IP_STATUS As Long = (11000 + 50)
Private Const IP_PENDING As Long = (11000 + 255)
Private Const PING_TIMEOUT As Long = 500
Private Const WS_VERSION_REQD As Long = &H101
Private Const MIN_SOCKETS_REQD As Long = 1
Private Const SOCKET_ERROR As Long = -1
Private Const INADDR_NONE As Long = &HFFFFFFFF
Private Const MAX_WSADescription As Long = 256
Private Const MAX_WSASYSStatus As Long = 128

Public PingTime As Long
Private Type ICMP_OPTIONS
    Ttl             As Byte
    Tos             As Byte
    Flags           As Byte
    OptionsSize     As Byte
    OptionsData     As Long
End Type

Private Type ICMP_ECHO_REPLY
    Address         As Long
    status          As Long
    RoundTripTime   As Long
    DataSize        As Long
    DataPointer     As Long
    Options         As ICMP_OPTIONS
    Data            As String * 250
End Type

Private Type WSADATA
    wVersion As Integer
    wHighVersion As Integer
    szDescription(0 To MAX_WSADescription) As Byte
    szSystemStatus(0 To MAX_WSASYSStatus) As Byte
    wMaxSockets As Long
    wMaxUDPDG As Long
    dwVendorInfo As Long
End Type

Public Declare Function timeGetTime Lib "winmm.dll" () As Long
Private Declare Function WSAStartup Lib "wsock32" (ByVal wVersionRequired As Long, lpWSADATA As WSADATA) As Long
Private Declare Function WSACleanup Lib "wsock32" () As Long
Private Declare Function IcmpCreateFile Lib "icmp.dll" () As Long
Private Declare Function inet_addr Lib "wsock32" (ByVal s As String) As Long
Private Declare Function IcmpCloseHandle Lib "icmp.dll" (ByVal IcmpHandle As Long) As Long
Private Declare Function IcmpSendEcho Lib "icmp.dll" (ByVal IcmpHandle As Long, ByVal DestinationAddress As Long, ByVal RequestData As String, ByVal RequestSize As Long, ByVal RequestOptions As Long, ReplyBuffer As ICMP_ECHO_REPLY, ByVal ReplySize As Long, ByVal Timeout As Long) As Long

Private Function GetStatusCode(status As Long) As String
    On Error GoTo ErrLine
    Dim Msg As String
    GetStatusCode = ""
    Select Case status
        Case IP_SUCCESS
        Msg = "ip success"
        Case INADDR_NONE
        Msg = "inet_addr: bad IP format"
        Case IP_BUF_TOO_SMALL
        Msg = "ip buf too_small"
        Case IP_DEST_NET_UNREACHABLE
        Msg = "ip dest net unreachable"
        Case IP_DEST_HOST_UNREACHABLE
        Msg = "ip dest host unreachable"
        Case IP_DEST_PROT_UNREACHABLE
        Msg = "ip dest port unreachable"
        Case IP_DEST_PORT_UNREACHABLE
        Msg = "ip dest port unreachable"
        Case IP_NO_RESOURCES
        Msg = "ip no resources"
        Case IP_BAD_OPTION
        Msg = "ip bad option"
        Case IP_HW_ERROR
        Msg = "ip hw_error"
        Case IP_PACKET_TOO_BIG
        Msg = "ip packet too_big"
        Case IP_REQ_TIMED_OUT
        Msg = "ip req timed out"
        Case IP_BAD_REQ
        Msg = "ip bad req"
        Case IP_BAD_ROUTE
        Msg = "ip bad route"
        Case IP_TTL_EXPIRED_TRANSIT
        Msg = "ip ttl expired transit"
        Case IP_TTL_EXPIRED_REASSEM
        Msg = "ip ttl expired reassem"
        Case IP_PARAM_PROBLEM
        Msg = "ip param_problem"
        Case IP_SOURCE_QUENCH
        Msg = "ip source quench"
        Case IP_OPTION_TOO_BIG
        Msg = "ip option too_big"
        Case IP_BAD_DESTINATION
        Msg = "ip bad destination"
        Case IP_ADDR_DELETED
        Msg = "ip addr deleted"
        Case IP_SPEC_MTU_CHANGE
        Msg = "ip spec mtu change"
        Case IP_MTU_CHANGE
        Msg = "ip mtu_change"
        Case IP_UNLOAD
        Msg = "ip unload"
        Case IP_ADDR_ADDED
        Msg = "ip addr added"
        Case IP_GENERAL_FAILURE
        Msg = "ip general failure"
        Case IP_PENDING
        Msg = "ip pending"
        Case PING_TIMEOUT
        Msg = "ping timeout"
        Case Else
        Msg = "unknown msg returned"
    End Select
    GetStatusCode = Msg
    Exit Function
ErrLine:
End Function

Private Function Ping(sAddress As String, sDataToSend As String, ECHO As ICMP_ECHO_REPLY) As Long
    On Error GoTo ErrLine
    Dim hPort As Long
    Dim dwAddress As Long
    dwAddress = inet_addr(sAddress)
    If dwAddress <> INADDR_NONE Then
        hPort = IcmpCreateFile()
        If hPort Then
            Call IcmpSendEcho(hPort, dwAddress, sDataToSend, Len(sDataToSend), 0, ECHO, Len(ECHO), PING_TIMEOUT)
            Ping = ECHO.status
            Call IcmpCloseHandle(hPort)
        End If
    Else
        Ping = INADDR_NONE
    End If
    Exit Function
ErrLine:
    Ping = INADDR_NONE
End Function

Public Function PingIP(ByVal szIp As String) As Boolean
    On Error GoTo ErrLine
    Dim WSAD As WSADATA
    Dim ECHO As ICMP_ECHO_REPLY
    Dim ret As Long
    'Delay 150
    PingIP = False
    PingTime = Empty
    If WSAStartup(WS_VERSION_REQD, WSAD) = IP_SUCCESS Then
        ret = Ping(Trim$(szIp), "tanaya", ECHO)
        PingTime = ECHO.RoundTripTime
        If InStr(1, GetStatusCode(ret), "success") <> 0 Then
            WSACleanup
            PingIP = True
            PingTime = ECHO.RoundTripTime
            Exit Function
        End If
    End If
    Exit Function
ErrLine:
End Function

对,模块源码来源于CSDN。

@ Mayuko

时间: 2024-12-17 04:40:49

Visual Basic-Ping!的相关文章

Visual Basic快捷教程——流程控制

美籍匈牙利数学家冯·诺依曼于1946年提出"程序存储,顺序执行"的观念,为现代计算机奠定了重要基础.这一观点认为:应该把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式储存.电子计算机的数制宜采用二进制:计算机应该按照程序顺序执行.所以现在开发人员在编写的程序代码时,其实都隐含地认为计算机将来会一行一行按顺序来执行这些指令.但是在顺序执行的过程中,有时我们希望计算机根据条件判断来选择性地执行(或者不执行)一些代码--这时就需要用到选择结构(或称分支结构).另外一些时候,我们希

【Visual Basic】vb6的ListView控件,对Access2003数据库的增删改查,判断是否有中文、多窗体操作

vb6对Access2003数据库的增删改查并不复杂,可以通过ado对象轻松完成,下面举个小例子,同时说明vb6中的ListView控件的使用.虽然在<[Visual Basic]列表控件ListView的增删改查.模态对话框.禁止窗口调整大小>曾经对VB.NET的ListView控件进行详细的说明,但是证明微软就是个坑爹货,vb6对于ListView实现的代码居然跟VB.NET有着彻底的不同,似乎换了一门语言似得的.改代码什么的最讨厌的. 首先,在vb6生成的工程文件夹中有着一个db1.md

VB.NET &amp; Visual Basic

当看到VB.NET者这本书籍的时候,翻开目录唯一的感受就是:这不和VB一样吗?到底有什么区别呢? 1)版本: 重新回顾VB,可以发现其实他是Microsoft退出的基于Windows操作系统环境下的软件开发工具,是一种功能强大的高级程序设计语言. Visual指的是GUI(graphical userinterfaces)的方法.使用这种方法进行程序设计时,用户只需根据界面设计的要求,将预先建立的对象添加到屏幕上,设置他们的各种属性. Basic指的是Basic语言,VB是BASIC语言的进一步

Visual Basic快捷教程——函数与子程序

函数是结构化程序设计的基础.可以拿现实生活中的"社会分工"这个概念来做类比.假设做包子只需要用到两种原料:一是用来做包子皮的面粉,另外就是用来做包子馅料的猪肉.作为一名专门做包子的厨师,你当然不能自己生产面粉和猪肉,所以你通常会从磨坊直接购买面粉,从肉铺直接购买猪肉.在这两种原料都具备的时候,你的任务仅仅只是负责做包子.更进一步,你还可以假设磨坊只负责把麦子磨成面粉,而不负责种植麦子,种植麦子的工作则有农民专门负责.对于做包子的厨师来说,他把生产面粉和猪肉这两项工作承包给了磨坊和肉铺,

VB.NET &amp;amp; Visual Basic

当看到VB.NET者这本书籍的时候,翻开文件夹唯一的感受就是:这不和VB一样吗?究竟有什么差别呢? 1)版本号: 又一次回想VB,能够发现事实上他是Microsoft退出的基于Windows操作系统环境下的软件开发工具,是一种功能强大的高级程序设计语言. Visual指的是GUI(graphical userinterfaces)的方法.使用这样的方法进行程序设计时,用户仅仅需依据界面设计的要求,将预先建立的对象加入到屏幕上,设置他们的各种属性. Basic指的是Basic语言,VB是BASIC

C#与Visual Basic的异与同

C#是一种高级程序设计语言,是一种安全.稳定.简单.优雅的编程语言,它与Visual Basic有很多相同的地方,同时也有很多不同的地方.我们今天这篇博客本着学习C#的原则,着重介绍一下C#与Visual Basic的相同点和不同点.从几个方面分别阐述.限于篇幅的原因,我们可能会分成几个部分,以几篇博客的形式呈现出来.希望大家多多关注,多提宝贵意见,我们共同进步!下面进入正题—— C#与Visual Basic一样,是一种面向对象的可视化程序设计语言.C#以其强大的操作能力.优雅的语法风格.创新

[Visual Basic 6.0] 数据处理 关键字过滤

摘要:[Visual Basic 6.0] 数据处理 关键字过滤 在商业用途上,有些关键字在文章中总是显得特别不好,甚至是游戏账号.客户账号的建立,通常我们都会设计一个程序来过滤敏感字. 我们可以简单利用 Visual Baisc 6.0 写一个数据过滤的程序,如此一来就可以轻轻松松过滤掉含有某串关键字的数据. 首先过滤之前的文件: 过滤后的文件: 那么我们该怎么实践呢? 以下是 VB6 写的程序,基本上作法与结构都已经使用注解注解起来了! '# [Visual Basic 6.0] 数据处理

Visual Basic for Applications

Visual Basic for Application(VBA) is an implementation of Microsoft’s event-driven programming language Visual Basic 6. Its associated integrated development(IDE) are built into most Microsoft Office applications. It enables building user defined fun

特性(C# 和 Visual Basic)

特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类型.方法.属性等)相关联. reflection.' data-guid="716c0768f610f38427afe934e71f1d47">特性与程序实体关联后,即可在运行时使用名为"反射"的技术查询特性. Reflection (C# and Visual Basic).' data-guid="4484aa4f01eb3fabaeabfd2ce4c39248">有

我与Visual Basic的那些事儿

公元2000年,IEEE计算机协会的一份期刊<Computing in Science & Engineering>上,两位客座编辑Francis Sullivan和Jack Dongarra遴选出了20世纪科学与工程的实践与发展上最具影响力的十大算法[1].随后,Barry Cipra又在SIAM News上发表文章对这十大算法进行了综述[2].2016年,SIAM的主席Nick Higham对原来的十大算法列表进行了些许调整,并给出了自己的名单[3].两份名单在十大算法中的七项上基