VB.NET-Tipp 0147: Prüfen, ob eine Internetverbindung besteht
von AtaRist
Beschreibung
Häufig ist es notwendig zu prüfen, ob eine Internetverbindung besteht. Dieser Tipp stellt eine einfache Klasse vor, die dies sowohl synchron (der aufrufende Thread wird blockiert) als auch asynchron (das Ergebnis wir über ein Ereignis gemeldet) erledigen kann. Ebenso kann sie dazu verwendet werden auf Verfügbarkeit eines Servers oder Clients im Internet wie auch im lokalen Netzwerk zu testen.
Schwierigkeitsgrad: | Framework-Version(en): .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5, .NET Framework 4 | .NET-Version(en): Visual Basic 2005, Visual Basic 2008, Visual Basic 2010 | Download: |
' Dieser Quellcode stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' Projektversion: Visual Studio 2008 ' Option Strict: An ' Option Explicit: An ' Option Infer: An ' ' Referenzen: ' - System ' - System.Data ' - System.Deployment ' - System.Drawing ' - System.Windows.Forms ' - System.Xml ' - System.Core ' - System.Xml.Linq ' - System.Data.DataSetExtensions ' ' Imports: ' - Microsoft.VisualBasic ' - System ' - System.Collections ' - System.Collections.Generic ' - System.Data ' - System.Drawing ' - System.Diagnostics ' - System.Windows.Forms ' - System.Linq ' - System.Xml.Linq ' ' ############################################################################## ' ############################## frmInetTest.vb ################################ ' ############################################################################## Public Class frmInetTest Private WithEvents inettest As New InternetTester Private Sub btnSync_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnSync.Click txtResults.Text = "" ' Mit der Adresse für ActiveVB und einer maximalen Wartezeit von ' 5 Sekunden prüfen ob eine Internetverbindung verfügbar ist. If inettest.Test("www.activevb.de", 5000) Then txtResults.Text = "Ein Zugriff auf das Internet ist möglich." Else txtResults.Text = "Ein Zugriff auf das Internet ist nicht möglich." End If End Sub Private Sub btnAsync_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnAsync.Click ' Mit der Adresse für ActiveVB und einer maximalen Wartezeit von ' 10 Sekunden asynchron prüfen ob eine Internetverbindung verfügbar ist. txtResults.Text = "" inettest.TestAsync("www.activevb.de", 10000) End Sub Private Sub inettest_Checkfinished(ByVal sender As Object, _ ByVal e As InternetCheckerEventArgs) Handles inettest.Checkfinished If e.IsAvailable Then txtResults.Text = "Ein Zugriff auf das Internet ist möglich." Else txtResults.Text = "Ein Zugriff auf das Internet ist nicht möglich." End If End Sub End Class ' ############################################################################## ' ############################# InternetTester.vb ############################## ' ############################################################################## Imports System.Net.NetworkInformation Public Class InternetTester Private WithEvents pinger As New Ping Public Event Checkfinished(ByVal sender As Object, _ ByVal e As InternetCheckerEventArgs) ''' <summary> ''' Beginnt eine asynchrone Prüfung auf eine bestehende Internetverbindung. ''' </summary> ''' <param name="url">Die URL dessen Erreichbarkeit geprüft werden ''' soll</param> ''' <param name="maxwait">Die Zeit in 1/1000 Sekunden die maximal auf eine ''' Antwort gewartet werden soll</param> Public Sub TestAsync(ByVal url As String, ByVal maxwait As Integer) If pinger Is Nothing Then pinger = _ New System.Net.NetworkInformation.Ping pinger.SendAsync(url, maxwait, Nothing) End Sub Private Sub pinger_PingCompleted(ByVal sender As Object, _ ByVal e As System.Net.NetworkInformation.PingCompletedEventArgs) _ Handles pinger.PingCompleted RaiseEvent Checkfinished(Me, _ New InternetCheckerEventArgs(e.Reply.Status = IPStatus.Success)) End Sub Public Sub CancelAsyncTest() pinger.SendAsyncCancel() End Sub ''' <summary> ''' Überprüft ob eine Internetverbindung besteht. ''' </summary> ''' <param name="url">Die URL dessen Erreichbarkeit geprüft werden ''' soll</param> ''' <param name="maxwait">Die Zeit in 1/1000 Sekunden, die maximal auf eine ''' Antwort gewartet werden soll</param> ''' <returns>Im Erfolgsfall wird True zurückgeliefert sonst False</returns> ''' <remarks>Diese Funktion kehrt erst bei einer erfolgreichen Antwort oder ''' nach der in maxwait angegebenen Zeit zurück</remarks> Public Function Test(ByVal url As String, ByVal maxwait As Integer) As Boolean Try Dim result As System.Net.NetworkInformation.PingReply = _ pinger.Send("www.activevb.de", 5000) If result.Status = Net.NetworkInformation.IPStatus.Success Then Return True Else Return False End If Catch Return False End Try End Function End Class Public Class InternetCheckerEventArgs Inherits EventArgs Private _IsAvailable As Boolean Public Sub New(ByVal isavailable As Boolean) _IsAvailable = isavailable End Sub Public ReadOnly Property IsAvailable() As Boolean Get Return _IsAvailable End Get End Property End Class
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.