|
|
![]() |
|
||
|
|
|||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Visual Basic Network Services IsDestinationReachable: Determine Network QOC Info |
|
| Posted: | Tuesday March 13, 2001 |
| Updated: | Monday December 26, 2011 |
| Applies to: | VB4-32, VB5, VB6 |
| Developed with: | VB6, Windows 2000 |
| OS restrictions: | Windows XP, Windows 2000, or Windows 95, 98 or NT with IE5 or later |
| Author: | VBnet - Randy Birch |
|
Related: |
InternetGetConnectedState: Determine Network Connection Type |
| Prerequisites |
| Windows XP, Windows 2000, or Windows 95, 98 or NT with IE5 or later. |
|
|
The
IsDestinationReachable API determines if the specified destination can be reached, and provides Quality of Connection (QOC) information for
the destination.IsDestinationReachable would be used by client applications to determine the QOC information before proceeding with network operations. For standalone computers that are directly connected to the network through a network card or remote access server (RAS), this function generates minimal network traffic with RPC calls to the nearest router. For computers that are part of a network where the destination can be reached using RAS or a network gateway, this function pings to the destination to generate accurate QOC information. (This function is only available for TCP/IP connections.) The destination address is passed as a string, and can be an IP address, a UNC name, or an URL. The lpQOCInfo member contains the QOCINFO structure that receives the Quality of Connection (QOC) information; if the QOC information is not desired, 0& (null) can be passed instead (you will need to amend the declare to change the second parameter to As Any to pass the null). The call returns True (1) if the destination can be reached using the network facilities currently active on the machine, or false if not. Note: The demo uses the VB6 FormatNumber function, which is not available in VB4-32 or VB5. Users of these versions should use Format$() instead, i.e. Format$(value, "###,###,###). |
| BAS Module Code |
| None. |
|
|
| Form Code |
|
|
| To a form add a command button (Command1), a combo (Combo1) and a text box which has been set as the first member of a control array (Text1(0)). Add a set of labels in a label array (Label1(0) - Label1(4) and set the captions as shown (starting at the top with 0). The Load event will load and position the required result textboxes. Add the following code: |
|
|
Option Explicit '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved. ' Some pages may also contain other copyrights by the author. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Distribution: You can freely use this code in your own ' applications, but you may not reproduce ' or publish this code on any web site, ' online service, or distribute as source ' on any media without express permission. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Type QOCINFO
dwSize As Long
dwFlags As Long
dwInSpeed As Long
dwOutSpeed As Long
End Type
Private Const NETWORK_ALIVE_LAN As Long = &H1 'active LAN cards
Private Const NETWORK_ALIVE_WAN As Long = &H2 'active RAS connections
Private Const NETWORK_ALIVE_AOL As Long = &H4 'connected to AOL (Win95/98 only)
Private Declare Function IsDestinationReachable Lib "sensapi.dll" _
Alias "IsDestinationReachableA" _
(ByVal lpszDestination As String, _
lpQOCInfo As QOCINFO) As Long
Private Sub Form_Load()
Dim c As Integer
Dim TotalRequired As Integer
TotalRequired = 4
'create an array of textboxes. The
'array is 0-based, so the first control is
'index 0, and the last is TotalRequired -1
For c = 0 To TotalRequired - 1
'since array element(0) already exists,
'don't try to load it
If c > 0 Then Load Text1(c)
'position the newly-created control
'and its label, if present
Text1(c).Move 1600, 600 + (c * 300), 3615
Label1(c).Move 200, 300 + (c * 300)
'clear and show
Text1(c).Text = ""
Text1(c).Visible = True
Next
'oops - one more label!
Label1(4).Move 200, 300 + (4 * 300)
With Combo1
.Clear
.Move 1600, 260, 3615
.AddItem "209.68.48.119" 'mvps IP
.AddItem "www.mvps.org" 'mvps dns
.AddItem "64.58.76.177" 'yahoo IP
.AddItem "www.yahoo.com" 'yahoo dns
.AddItem "192.168.0.1" 'local router
.AddItem "192.168.0.100" 'machine on lan
.AddItem "www.gov.on.ca" 'gov of Ontario internet
End With
With Command1
.Caption = "Is Destination Reachable?"
.Move 2880, 2040, 2415, 375
.Default = True
End With
Me.Move Me.Left, Me.Top, 5640, 2985
Me.Caption = "VBnet Network Destination Reachable Test"
End Sub
Private Sub Combo1_Click()
Text1(0).Text = ""
Text1(1).Text = ""
Text1(2).Text = ""
Text1(3).Text = ""
End Sub
Private Sub Command1_Click()
'Notes: - This function is only available for
' TCP/IP connections.
' - You can supply a NULL pointer (0&) if
' the QOC information is not required (and
' change the declare's parameter to As Any).
Dim result As Long
Dim tmp As String
Dim qoc As QOCINFO
With qoc
.dwSize = Len(qoc)
End With
result = IsDestinationReachable((Combo1.Text), qoc)
With qoc
Select Case .dwFlags
Case NETWORK_ALIVE_LAN: tmp = "computer has one or more active LAN cards"
Case NETWORK_ALIVE_WAN: tmp = "computer has one or more active RAS connections"
Case NETWORK_ALIVE_AOL: tmp = "computer is connected to the America Online network"
Case Else
End Select
Text1(0).Text = Format$(result, "Yes/No")
Text1(1).Text = FormatNumber(.dwInSpeed, 0) & " bytes per second"
Text1(2).Text = FormatNumber(.dwOutSpeed, 0) & " bytes per second"
Text1(3).Text = tmp
End With
End Sub |
| Comments |
|
|
|
|
|
|||||
|
|||||
|
|
|||||
|
Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved. |
![]() |