Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0147: Prüfen, ob eine Internetverbindung besteht

 von 

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:

Schwierigkeitsgrad 1

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:

Download des Beispielprojektes [12,31 KB]

' 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.