Testen ob ein Host existiert (ist einer Connected?)

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von BigBen2003.

    Testen ob ein Host existiert (ist einer Connected?)

    Hallo,

    habe im vb-Code eine Function, mit der getestet wird, ob ein Host existiert oder nicht:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Function CheckOnline_intern(hostname As String, timeout As Integer) As PingReply
    2. Try
    3. Dim pingSender = New Ping
    4. Dim Options As PingOptions = New PingOptions With {
    5. .DontFragment = True
    6. }
    7. Dim data As String = New String("a"c, 32) ' Strings.StrDup(32, "a") '"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    8. Dim buffer() As Byte = System.Text.Encoding.ASCII.GetBytes(data)
    9. Dim reply As PingReply = pingSender.Send(hostname, timeout, buffer, Options)
    10. Return reply
    11. Catch ex As ArgumentException
    12. Return Nothing
    13. Catch ex As InvalidOperationException
    14. Return Nothing
    15. Catch ex As NotSupportedException
    16. Return Nothing
    17. End Try
    18. End Function



    Leider wirft der Befehl

    VB.NET-Quellcode

    1. pingSender.Send
    eine Exception, wenn ein Host nicht vorhanden ist.

    Klar, die Exceptions werden von Try-Catch abgefangen.

    Hier stellt sich die Frage, ob es auch eine Methode gibt, in der keine Exception geworfen wird, sondern einfach nur den Wert "Nothing" zurück gibt, wenn ein Host nicht existiert.

    Hintergrund: In Visual Studio kann man einstellen, dass die Ausführung beim Auftreten von diversen Fehlern angehalten wird, oder nicht.

    Diese Einstellung kann scheinbar nur Projektweit festgelegt werden, und nicht für eine Sub, Function oder Property deaktiviert werden.

    Oder irre ich mich da?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BigBen2003“ ()

    Probier des mal:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Function PingTest(ByVal _IP As String) As Boolean
    2. Dim ping As Net.NetworkInformation.Ping = New Net.NetworkInformation.Ping()
    3. Dim pingStatus As Net.NetworkInformation.PingReply = ping.Send(Net.IPAddress.Parse(_IP), 1000)
    4. If pingStatus.Status = System.Net.NetworkInformation.IPStatus.Success Then
    5. Return True
    6. Else
    7. Return False
    8. End If
    9. End Function
    @Morrison: Solche Konstrukte wie

    VB.NET-Quellcode

    1. If pingStatus.Status = System.Net.NetworkInformation.IPStatus.Success Then
    2. Return True
    3. Else
    4. Return False
    5. End If
    können immer zu dem hier gemacht werden:

    VB.NET-Quellcode

    1. Return pingStatus.Status = System.Net.NetworkInformation.IPStatus.Success
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()