IP-Bereich (10.13.214.) anpingen

  • VB.NET

Es gibt 34 Antworten in diesem Thema. Der letzte Beitrag () ist von vb-checker.

    Wieso sollte man nicht mehrere Dingen gleichzeitig auf ne Leitung senden können?!
    Das eigentliche was wirklich Zeit braucht beim Ping ist das Warten.

    Die resultate über ne Schleife auslesen?
    Du kannst ja überprüfen, welcher Bereich es ist. (z.b. über ip.contains("ipbereich"))


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Feuere halt ein Event, wenn das Pingen abgeschlossen ist...

    VB.NET-Quellcode

    1. Imports System.Threading.Tasks
    2. Imports System.Net.NetworkInformation
    3. Imports System.Threading
    4. Public Class Form1
    5. Private _listIPs As New List(Of String)
    6. Private _listReplys As New List(Of PingReply)
    7. Private Event WorkDone()
    8. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    9. Dim t As New Thread(AddressOf ExecutePings)
    10. t.Start()
    11. End Sub
    12. Private Sub ExecutePings()
    13. Parallel.ForEach(_listIPs, Sub(ip)
    14. Dim pReq As New Ping()
    15. Dim pRes As PingReply = pReq.Send(ip)
    16. _listReplys.Add(pRes)
    17. End Sub)
    18. RaiseEvent WorkDone()
    19. End Sub
    20. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    21. _listIPs.Add("192.168.2.5")
    22. _listIPs.Add("192.168.2.7")
    23. _listIPs.Add("192.168.2.77")
    24. _listIPs.Add("192.168.2.78")
    25. _listIPs.Add("192.168.2.65")
    26. _listIPs.Add("192.168.2.11")
    27. End Sub
    28. Private Sub ProcessIPs() Handles Me.WorkDone
    29. For Each pR As PingReply In _listReplys
    30. 'Achtung! Hier kommen die Daten aus einem anderen Thread. Ggf. mit Invoke o. ä. behandeln!
    31. Next
    32. End Sub
    33. End Class


    Hier aufpassen und die Steuerelemente ggf. mit Invoke ansprechen, da die Daten aus einem anderen Thread kommen!!!!
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Wenn ich in "Private Sub ProcessIPs() Handles Me.WorkDone" nun einfüge Label1.Text = "Netz = A" dann würde ich ja immer im Label-1 Netz = A stehen haben sobald eine IP in der Liste erreichbar ist.

    Er soll ja aber wenn irgendeine IP im Bereich 10.13.214.1 bis 10.13.214.255 erreichbar ist das Label-1 mit dem Text "Netz = A" versehen. Wenn aber eine IP im Bereich 10.14.196.1 bis 10.14.196.255 erreichbar ist das Label-1 mit dem Text "Netz = B" versehen.....
    Bei allem Respekt, aber um die "Logik" in Deinem Programm musst Dich schon selber kümmern. Wenn ich mir Deinen Nudel-Code weiter oben angugge, dann machst Du doch genau das, was Du jetzt bemängelst. Ich mein, ich verstehe immer noch nicht, was Du überhaupt machen möchtest. Ich versteh immer nur Bahnhof, was Dein Programm bewirken soll. Ist doch nicht so schwer, in der ProcessIPs-Sub die PingReplys entsprechend abzufragen und das Label zu setzen, oder?
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Leider ist es schwer für mich, da ich leider noch nicht soooooviel ahnung vom programmieren habe.
    Warum genau das mein Programm können soll würde glaube ich jetzt den rahmen sprengen dies hier zu erklären.

    Hatte es jetzt von meiner Logik her in der ProcessIPs-Sub folgendermaßen probiert, jedoch ohne Erfolg :(

    VB.NET-Quellcode

    1. Private Sub ProcessIPs() Handles Me.WorkDone
    2. For Each pR As PingReply In _listReplys
    3. 'Achtung! Hier kommen die Daten aus einem anderen Thread. Ggf. mit Invoke o. ä. behandeln!
    4. PingReply.Contains("10.13.214.") = IPStatus.Success
    5. Label1.Text = "Netz = A"
    6. Next
    7. End Sub

    thefiloe schrieb:

    Wieso sollte man nicht mehrere Dingen gleichzeitig auf ne Leitung senden können?!
    Das eigentliche was wirklich Zeit braucht beim Ping ist das Warten.

    Weil EINE Leitung nur EINE Sache senden kann. Genau so wie auf einer einspurigen Straße auch nur ein Auto fahren kann. Klingt logisch, oder? Du kannst mir ja gerne erklären, wie du auf einer Leitung zwei Bits gleichzeitig senden willst.
    en.wikipedia.org/wiki/Data_tra…and_parallel_transmission

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    @zauber777

    VB.NET-Quellcode

    1. Imports System.Threading.Tasks
    2. Imports System.Net.NetworkInformation
    3. Imports System.Threading
    4. Imports System.ComponentModel
    5. Public Class Form1
    6. Private _listIPs As New List(Of IpItem)
    7. Private _listReplys As New List(Of IpItem)
    8. Private Event WorkDone()
    9. Private asyncOp As AsyncOperation
    10. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    11. Dim t As New Thread(AddressOf ExecutePings)
    12. t.Start()
    13. End Sub
    14. Private Sub ExecutePings()
    15. _listReplys.Clear()
    16. Parallel.ForEach(_listIPs, Sub(ipItem As IpItem)
    17. Dim pReq As New Ping()
    18. Dim pRes As PingReply = pReq.Send(ipItem.ip)
    19. 'Hier nur erfolgreiche Pings einfügen!
    20. If pRes.Status = IPStatus.Success Then
    21. _listReplys.Add(ipItem)
    22. End If
    23. End Sub)
    24. asyncOp.Post(New SendOrPostCallback(AddressOf OnWorkDonePost), Nothing)
    25. End Sub
    26. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    27. _listIPs.Add(New IpItem("Netz A", "192.168.2.5"))
    28. _listIPs.Add(New IpItem("Netz A", "192.168.2.7"))
    29. _listIPs.Add(New IpItem("Netz B", "192.168.2.77"))
    30. _listIPs.Add(New IpItem("Netz B", "192.168.2.78"))
    31. _listIPs.Add(New IpItem("Netz C", "192.168.2.65"))
    32. _listIPs.Add(New IpItem("Netz C", "192.168.2.11"))
    33. asyncOp = AsyncOperationManager.CreateOperation(Nothing)
    34. End Sub
    35. Private Sub OnWorkDonePost(ByVal o As Object)
    36. OnWorkDone()
    37. End Sub
    38. Private Sub OnWorkDone()
    39. RaiseEvent WorkDone()
    40. End Sub
    41. Private Sub ProcessIPs() Handles Me.WorkDone
    42. If _listReplys.Count = 0 Then
    43. Me.Label1.Text = "Kein Netz erreichbar!"
    44. Exit Sub
    45. End If
    46. Me.Label1.Text = _listReplys(0).netName & " ist erreichbar!"
    47. End Sub
    48. Private Class IpItem
    49. Public netName As String
    50. Public ip As String
    51. Public Sub New(ByVal netName As String, ByVal ip As String)
    52. Me.netName = netName
    53. Me.ip = ip
    54. End Sub
    55. End Class
    56. End Class


    Ist schon klar, dass es nicht leicht zu verstehen ist, aber: Dann befasse Dich eben mit den Grundlagen. Was hilft es Dir, wenn Du hier Fragen stellst und die Antworten nicht verstehst. Ich würd dieses Problem mit Hilfe von OOP lösen, aber wenn Du diese Grundlagen nicht verstehst, ist es einfach nicht zu erklären. Jedenfalls nicht hier in dem Forum.

    EDIT: Bei jedem Aufruf von "ExecutePings" die _listReplys löschen. Code wurde geändert...
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

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

    vb-checker schrieb:

    thefiloe schrieb:

    Wieso sollte man nicht mehrere Dingen gleichzeitig auf ne Leitung senden können?!
    Das eigentliche was wirklich Zeit braucht beim Ping ist das Warten.

    Weil EINE Leitung nur EINE Sache senden kann. Genau so wie auf einer einspurigen Straße auch nur ein Auto fahren kann. Klingt logisch, oder? Du kannst mir ja gerne erklären, wie du auf einer Leitung zwei Bits gleichzeitig senden willst.
    en.wikipedia.org/wiki/Data_tra…and_parallel_transmission

    interessante aussage... uh da fällt mir ein multiplexingO.o
    Eine kleine Frage habe ich doch mal.
    Wenn mein Programm mal fertig ist, werden dann circa 25500 oder mehr IP adressen in der Liste sein. (Das war auch der eigentliche Grund warum ich ja nur die ersten 3 Bereiche bsp 10.13.225. anpingen wollte)

    Damit das Programm während der Pings nicht einschläft, hatte ich mir überlegt das ganze im backgroundworker laufen zulassen.
    In dem Code ist aber in den Sub Execute Pings() einmal der Begriff Parallel und auch asyncOP. Diese Funktionen kenne ich noch nicht. Daher frage ich mich, ob dies somit auch das "einschlafen/blockieren" des Programms verhindert oder ob es besser ist, das ganze in ein Backgroundworker zupacken?
    Da fallen mir noch ganz andere Sachen ein.
    OnlineGame, Skype, Teamspeak, Youtube stream, downloads,... hmmm mal überlegen... 1,2,3,4,5,... Dinge oO.

    Noch nie aufgefallen? Du kannst google anpingen und z.B. deinen Router gleichzeitig und noch immer alle die z.B. oben genannten Dinge tun. Wenn du keinen plan hast verzapf bitte keinen Crap .
    Es ist nicht so, dass du etwas streamst und wenn du das 1h machst, dass die Leitung eine 1h blockiert ist.

    Nein das geht Frame weise über die Leitung. Das heißt nen Frame Stream, nen Frame Skype, nen Frame dateidownload usw...

    Außerdem schau dir dochma z.B. im Cmd an was da passiert wenn du z.B. google pingst?
    Da steht Daten=32Bytes. Fakt ist, dass 32 Bytes so gut wie gaaaar keine Leistung/Auslastung der Leitung verursachen. Das was dort so lange geht ist nunmal das warten auf die Antwort vom Server.

    Aber garantiert nicht, dass das Senden von 32 Bytes in einem interval von 50-500 ms die Leitung blockiert?!


    Echt absurd. Lad dir erstma was wie wireshark runter und schau dir erstma an was auf so ner Leitung los ist. Kleine Gratisprognose: bedeutend mehr als EIN Ping.

    Also überleg dir in Zukunpft lieber besser ob solche Meldungen nötig sind.


    Ach ja: Natürlich ist es nicht möglich 2 Bits gleichzeitig zu senden aber es war auch sehr sehr lange nicht möglich auf EINEM Prozessor ZWEI Sachen "gleichzeitig" ablaufen zu lassen.
    ABER Multithreading OO welch Magie?! Sitzen da deiner Meinung nach kleine grüne Wesen in einem Rechner oder wie können auf EINEM Prozessor ZWEI Sachen gleichzeitig ablaufen?

    Ich meine
    Genau so wie auf einer einspurigen Straße auch nur ein Auto fahren kann. Klingt logisch, oder?

    EDIT: Grad noch gesehen. Wenn etwas Async läuft kannst du davon ausgehen, dass deine Form nicht einschläft. Das einschlafen kommt daher, dass du von mir aus 40 Sekunden am pingen bist und somit der Thread eben mit pingen beschäftigt ist. Somit kann natürlich deine Form nicht aktualisiert werden und auch nicht auf Eingaben reagieren. (einfach ausgedrückt)


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    zauber777 schrieb:


    Eine kleine Frage habe ich doch mal.
    Wenn mein Programm mal fertig ist, werden dann circa 25500 oder mehr IP adressen in der Liste sein. (Das war auch der eigentliche Grund warum ich ja nur die ersten 3 Bereiche bsp 10.13.225. anpingen wollte)

    Damit das Programm während der Pings nicht einschläft, hatte ich mir überlegt das ganze im backgroundworker laufen zulassen.
    In dem Code ist aber in den Sub Execute Pings() einmal der Begriff Parallel und auch asyncOP. Diese Funktionen kenne ich noch nicht. Daher frage ich mich, ob dies somit auch das "einschlafen/blockieren" des Programms verhindert oder ob es besser ist, das ganze in ein Backgroundworker zupacken?


    Hey,

    Du brauchst hier keinen Backgroundworker. Dieser Aufruf:

    VB.NET-Quellcode

    1. Dim t As New Thread(AddressOf ExecutePings)
    2. t.Start()


    erzeugt einen neuen Thread. Ein BGW ist auch nichts anderes. Deine Anwendung wird nicht blockieren!

    VB.NET-Quellcode

    1. Parallel.ForEach(_listIPs, Sub(ipItem As IpItem)
    2. Dim pReq As New Ping()
    3. Dim pRes As PingReply = pReq.Send(ipItem.ip)
    4. 'Hier nur erfolgreiche Pings einfügen!
    5. If pRes.Status = IPStatus.Success Then
    6. _listReplys.Add(ipItem)
    7. End If
    8. End Sub)


    Ich glaub, Parallel gibt es seit VB2010, wenn ich mich nicht irre. Dieser Codeabschnitt mach folgendes. Du sagst dem Framework, ich hätte die Funktion, die in Klammern steht, gerne nach Möglichkeit Parallel ausgeführt. Das Framework regelt das Ganze. Es zerlegt die Sub in Teile und führt diese Teile dann parallel aus. So grob kann man sich das vorstellen. Es KANN einen Geschwindigkeitsvorteil haben, muss aber nicht. Dies müsste man mit vielen, vielen Daten testen. Aber hier bietet es sich meiner Ansicht nach an.

    VB.NET-Quellcode

    1. asyncOp.Post(New SendOrPostCallback(AddressOf OnWorkDonePost), Nothing)


    Da "ExecutePing" in einem anderen Thread ausgeführt wird, hast Du keinen "sauberen" Zugriff auf die Steuerelemente (Labels etc.) auf Deiner Form. Der Aufruf von asyncOp.Post bewirkt, dass sich der Thread quasi in den GUI-Thread einhängt und die Werte der Steuerelemente setzt. Auch so grob erklärt. Du würdest sonst die Fehlermeldung erhalten, dass der Zugriff auf die Steuerelemente aus einem anderen Thread heraus erfolgt. Hier gibt es noch andere Möglichkeiten, dies zu "synchronisieren".
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    thefiloe schrieb:

    Nein das geht Frame weise über die Leitung. Das heißt nen Frame Stream, nen Frame Skype, nen Frame dateidownload usw...

    Frame für Frame, nacheinander. merkste selbst, ne?

    Aber garantiert nicht, dass das Senden von 32 Bytes in einem interval von 50-500 ms die Leitung blockiert?!
    Echt absurd. Lad dir erstma was wie wireshark runter und schau dir erstma an was auf so ner Leitung los ist. Kleine Gratisprognose: bedeutend mehr als EIN Ping.
    Also überleg dir in Zukunpft lieber besser ob solche Meldungen nötig sind.

    Das habe ich nie angezweifelt.

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „vb-checker“ ()

    thefiloe schrieb:

    KEIN Mensch hat je behauptet, dass zwei Bits auf ein Kabel gehen!!

    vb-checker schrieb:

    Aber ist ja eigentlich egal, so lange es von der Netzwerkkarte als pseudo-parallel dargestellt wird ^^


    Wie du siehst, habe ich schon vor einigen Posts geschrieben, dass es " ja eigentlich egal" sei. Aber wenn du unbedingt 'ne Diskussion vom Zaun brechen willst :>

    Und dein Fail-Geblubber kannste dir auch sparen. kthx

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !