Ping gibt in Schleife anderes Ergebnis als ohne Schleife

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von BiedermannS.

    Ping gibt in Schleife anderes Ergebnis als ohne Schleife

    Hallo,
    ich bin grade dabei ein kleines Programm zu schreiben, das alle im Netzwerk angemeldeten Geräte anzeigt.
    Dazu
    Pinge ich einfach in meinem aktuellen Netzwerk die IPs ...1 - 255. Die
    erfolgreich gepingten IPs werden dann in eine ListBox geschrieben:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Try
    3. Dim curIP As String = lbIP.SelectedItem.ToString()
    4. Dim curNWparts() As String
    5. Dim curNW As String
    6. curNWparts = curIP.Split(".")
    7. curNW = curNWparts(0) & "." & curNWparts(1) & "." & curNWparts(2) & "."
    8. MsgBox(curNW)
    9. Dim i As Integer = 1
    10. For i = 1 To 255
    11. Me.Cursor() = Cursors.WaitCursor
    12. PingNW(curNW & i)
    13. i = i + 1
    14. Me.Cursor() = Cursors.Default
    15. Next
    16. Catch ex As Exception
    17. MsgBox("Select an IP!")
    18. End Try
    19. end Sub


    VB.NET-Quellcode

    1. Public Function PingNW(ByRef IP As String) As String
    2. Dim cmd, op, err
    3. On Error Resume Next
    4. cmd = CreateObject("WScript.Shell").Exec("ping -n 1 " & IP)
    5. op = cmd.StdOut.ReadAll
    6. err = cmd.StdErr.ReadAll
    7. If op.contains("Zielhost nicht erreichbar.") Then Else lbH.Items.Add(IP)
    8. End Function




    Das klappt auch halbwegs. Er listet zumindest die angemeldeten PCs auf,
    nur leider nicht andere Geräte wie zB mein Handy mit der IP ...36. Pinge
    ich aber diese IP einzeln wird sie ganz normal als online angezeigt:

    VB.NET-Quellcode

    1. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    2. Dim sinIP As String = TextBox2.Text
    3. PingNW(sinIP)
    4. End Sub




    Es wird dabei also eigentlich die gleiche Funktion mit der gleichen
    Variable ausgeführt, mit dem einzigen Unterschied, dass dies nicht in
    der Schleife passiert. Hat jemand eine Idee warum das Ergebnis
    unterschiedlich ausfällt?



    VG Rezin
    Ich hab deinen Code nicht so richtig verstanden. Warum machst du eine Function und warum verwendest du ByRef? Ich würde das irgendwie so machen:

    VB.NET-Quellcode

    1. Public Sub PingNW(ByVal IP As String)
    2. Dim tmpPing As New System.Net.NetworkInformation.Ping
    3. If tmpPing.Send(IP).Status = Net.NetworkInformation.IPStatus.Success Then
    4. lbH.Items.Add(IP)
    5. End If
    6. End Sub

    Warum es bei deiner Version Probleme gibt weis ich allerdings nicht.

    Evtl. ist mein Code auch Blödsinn, aber vieleicht bringts dich ja weiter :).

    Gruss,
    Fletchan
    Vl löst du einen Timeout aus.

    versuch mal folgendes:

    VB.NET-Quellcode

    1. Function ping(ByVal ip As String, Optional timeout As Integer = 1000) As Boolean
    2. Dim sendPing As New System.Net.NetworkInformation.Ping
    3. Dim options As New System.Net.NetworkInformation.PingOptions(999, True)
    4. Dim buffer() As Byte = {0&}
    5. Dim success As System.Net.NetworkInformation.IPStatus = sendPing.Send(System.Net.IPAddress.Parse(ip), 1000, buffer, options).Status
    6. If success = Net.NetworkInformation.IPStatus.Success Then
    7. Return True
    8. Else
    9. MsgBox(success.ToString)
    10. Return False
    11. End If
    12. End Function


    Was passiert wenn du zu der Adresse deines Handys kommst?

    Vl Antwortet dein Handy auch einfach nicht auf den Ping-Request...
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D