| File: Microsoft\VisualBasic\Devices\Network.Ping.vb | Web Access |
| Project: src\winforms\src\Microsoft.VisualBasic.Forms\src\Microsoft.VisualBasic.Forms.vbproj (Microsoft.VisualBasic.Forms) |
' Licensed to the .NET Foundation under one or more agreements. ' The .NET Foundation licenses this file to you under the MIT license. Imports NetInfoAlias = System.Net.NetworkInformation Imports VbUtils = Microsoft.VisualBasic.CompilerServices.ExceptionUtils Namespace Microsoft.VisualBasic.Devices Partial Public Class Network ' Size of Ping.exe buffer Private Const BUFFER_SIZE As Integer = 32 ' Default timeout for Ping Private Const DEFAULT_PING_TIMEOUT As Integer = 1000 ' Holds the buffer for pinging. We lazy initialize on first use Private _pingBuffer() As Byte ''' <summary> ''' A buffer for pinging. This imitates the buffer used by Ping.Exe. ''' </summary> ''' <value>A buffer.</value> Private ReadOnly Property PingBuffer() As Byte() Get If _pingBuffer Is Nothing Then ReDim _pingBuffer(BUFFER_SIZE - 1) For i As Integer = 0 To BUFFER_SIZE - 1 ' This is the same logic Ping.exe uses to fill it's buffer _pingBuffer(i) = Convert.ToByte( value:=Asc("a"c) + (i Mod 23), provider:=Globalization.CultureInfo.InvariantCulture) Next End If Return _pingBuffer End Get End Property ''' <summary> ''' Sends and receives a packet to and from the passed in address. ''' </summary> ''' <param name="hostNameOrAddress"></param> ''' <returns>True if ping was successful, otherwise False.</returns> Public Function Ping(hostNameOrAddress As String) As Boolean Return Ping(hostNameOrAddress, DEFAULT_PING_TIMEOUT) End Function ''' <summary> ''' Sends and receives a packet to and from the passed in Uri. ''' </summary> ''' <param name="address">A Uri representing the host.</param> ''' <returns>True if ping was successful, otherwise False.</returns> Public Function Ping(address As Uri) As Boolean ' We're safe from Ping(Nothing, ...) due to overload failure (Ping(String,...) vs. Ping(Uri,...)). ' However, it is good practice to verify address before calling address.Host. If address Is Nothing Then Throw VbUtils.GetArgumentNullException(NameOf(address)) End If Return Ping(address.Host, DEFAULT_PING_TIMEOUT) End Function ''' <summary> ''' Sends and receives a packet to and from the passed in address. ''' </summary> ''' <param name="hostNameOrAddress">The name of the host as a Url or IP Address.</param> ''' <param name="timeout">Time to wait before aborting ping.</param> ''' <returns>True if ping was successful, otherwise False.</returns> Public Function Ping(hostNameOrAddress As String, timeout As Integer) As Boolean ' Make sure a network is available If Not IsAvailable Then Throw VbUtils.GetInvalidOperationException(SR.Network_NetworkNotAvailable) End If Dim pingMaker As New NetInfoAlias.Ping Dim reply As NetInfoAlias.PingReply = pingMaker.Send( hostNameOrAddress, timeout, PingBuffer) If reply.Status = NetInfoAlias.IPStatus.Success Then Return True End If Return False End Function ''' <summary> ''' Sends and receives a packet to and from the passed in Uri. ''' </summary> ''' <param name="address">A Uri representing the host.</param> ''' <param name="timeout">Time to wait before aborting ping.</param> ''' <returns>True if ping was successful, otherwise False.</returns> Public Function Ping(address As Uri, timeout As Integer) As Boolean ' We're safe from Ping(Nothing, ...) due to overload failure (Ping(String,...) vs. Ping(Uri,...)). ' However, it is good practice to verify address before calling address.Host. If address Is Nothing Then Throw VbUtils.GetArgumentNullException(NameOf(address)) End If Return Ping(address.Host, timeout) End Function End Class End Namespace