Alternative zu My.Computer.Network.Ping

  • VB.NET
  • .NET 4.5

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von JackCimberly.

    Alternative zu My.Computer.Network.Ping

    Hi Gemeinde.

    Ich habe folgenden Code, der überprüfen soll, ob der Rechner eine aktive Internetverbindung hat.

    VB.NET-Quellcode

    1. If ProgramUpdateUpdate.IsOnline = True Then
    2. 'irgendein Code, der hier ausgeführt wird ^^
    3. End If


    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Funktion um zu überprüfen, ob die Arbeitsstation online ist
    3. ''' </summary>
    4. ''' <returns>online = TRUE/FALSE</returns>
    5. Function IsOnline() As Boolean
    6. Dim online As Boolean = False
    7. If My.Computer.Network.IsAvailable = True Then
    8. If My.Computer.Network.Ping("www.google.de", 1000) = True Then
    9. online = True
    10. End If
    11. Else
    12. online = False
    13. End If
    14. Return online
    15. End Function


    Wenn ich nun keine Internetverbindung habe (ob der Provider mal spackt oder ich das manuell erzwinge), bekomme ich immer eine Exeption ausgeworfen (wegen Zeile 10).

    System.Net.NetworkInformation.PingException
    HResult=0x80131509
    Nachricht = Während einer Pinganforderung ist eine Ausnahme aufgetreten.
    Innere Ausnahme 1:
    SocketException: Der angegebene Host ist unbekannt

    Gibt es eine Alternative, dass man diesen Fehler abfangen kann, ohne dass das Programm abstürzt?

    ===================
    EIDT
    ===================

    Habe das wie folgt gelöst (in Try-Catch-Block gepackt):

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Funktion um zu überprüfen, ob die Arbeitsstation online ist
    3. ''' </summary>
    4. ''' <returns>online = TRUE/FALSE</returns>
    5. Function IsOnline() As Boolean
    6. Dim online As Boolean = False
    7. If My.Computer.Network.IsAvailable = True Then
    8. Try
    9. If My.Computer.Network.Ping("www.google.de", 1000) = True Then
    10. online = True
    11. End If
    12. Catch ex As Exception
    13. online = False
    14. End Try
    15. Else
    16. online = False
    17. End If
    18. Return online
    19. End Function


    Ist das sauber umgesetzt?

    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „JackCimberly“ ()

    Zum einen lässt sich der Erstcode auf folgendes reduzieren:

    VB.NET-Quellcode

    1. Function IsOnline() As Boolean
    2. Return My.Computer.Network.IsAvailable AndAlso My.Computer.Network.Ping("www.google.de", 1000)
    3. End Function

    zum anderen habe ich folgendes probiert:
    • bin online -> True
    • bin im Netzwerk, habe aber keinen Internetzugriff: nach ca. 10s False
    • bin nicht im Netzwerk: sofort false
    Ich bekomm überhaupt keine Exception. Und wenn Du ne Ex abfangen willst, dann am besten so konkret wie möglich. Catch Ex As Exception fängt ungefiltert alles ab und versaut Dir in anderen Szenarien eine vernünftige Fehlerprävention.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    JackCimberly schrieb:

    Alternative
    Die Alternative ist System.Net.NetworkInformation.Ping
    My.Computer.Network.Ping macht nämlich auch nichts anderes als diese Methode aufzurufen.
    Nur dass du beim Direktaufruf kein Boolean zurück kriegst, sondern ein PingReply-Objekt.

    JackCimberly schrieb:

    Fehler abfangen

    Kannst du mit Try..Catch
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Danke Dir.

    Drei-Zeiler - nicht schlecht.
    Da muss ich mir mal die Operatoren anschauen. ^^

    Mein ersten Post habe ich editiert. Aber darauf bist Du auch schon eingegangen. ;)

    @VaporiZed Exception: Hast Du mal dein Netzwerkadapter deaktiviert? So habe ich es gemacht (kein Netzwerk + kein Internet).
    Wenn ein Laptop kein WLAN hat, hat dieser ebenfalls kein Netzwerk + kein Internet.
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren
    Bei der non-My-Variante

    VB.NET-Quellcode

    1. Function IsOnline() As Boolean
    2. If Not Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable() Then Return False
    3. Dim Status = New Net.NetworkInformation.Ping().Send("www.google.de", 1000)
    4. '...
    5. End Function

    kannst Du auch den Status auswerten.
    Da bekomm ich auch keine Ex beim Gerätdeaktivieren.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.