My.Computer.Network.Ping

  • VB.NET
  • .NET 5–6

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Jürgen_D.

    My.Computer.Network.Ping

    Hallo Zusammen,

    in meiner Applikation frage ich über den Befehl My.Computer.Network.Ping mehrere Adressen (insgesamt 60 Stück) ab.
    Wenn nur wenig Geräte eingeschaltet sind dauert die Abfrage sehr lange da er natürlich mehrfach versucht die Adressen zu erreichen.
    Gibt es eine Möglichkeit das er nur eine bestimmte Anzahl von Versuchen unternimmt die Netzwerkadresse anzupingen?
    Somit würde die Abfrage deutlich schneller gehen.

    Vielen Dank für eure Hilfe

    Gruß Jürgen

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    @Jürgen_D Da bietet sich doch ein Parallel.For() oder Parallel.ForEach() an.
    Noch schneller wird es nicht gehen.
    learn.microsoft.com/de-de/dotn…-simple-parallel-for-loop
    learn.microsoft.com/de-de/dotn…ple-parallel-foreach-loop
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    #RodFromGermany
    danke für die schnelle Antwort.
    Gebe ganz ehrlich zu komme mit der Anleitung nicht so klar - bin da echt sehr Anfängermässig unterwegs.
    Ich dachte das man änlich wie beim cmd z.B. -n 1 hinter meine Befehlszeile If My.Computer.Network.Ping(PCadressen.IPPC2.Text) Then
    eingeben kann damit nur ein Ping angefragt wird.
    Gibt es da eine andere Möglichkeit?

    Jürgen_D schrieb:

    Gibt es da eine andere Möglichkeit?
    Wie kommen denn die Adressen da PCadressen.IPPC2.Text rein?
    Du musst schon ein wenig mehr ausholen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    #RodFromGermany
    ich lese aus einer separaten Tabelle (PCadressen) den Inahlt von den Textboxen IPPC1-IPPC60 aus jeweils mit einer eigenen If My.Computer.Network.Ping Abfrage.
    In den Textboxen sind die Ip-Adressen eingetragen.

    VB.NET-Quellcode

    1. If PCadressen.IPPC1.Text = "nV" Then
    2. PC1.Visible = False
    3. Label1.Visible = False
    4. Else
    5. Label1.Visible = True
    6. PC1.Visible = True
    7. If My.Computer.Network.Ping(PCadressen.IPPC1.Text) Then
    8. PC1.Visible = Truee
    9. Label1.BackColor = Gruen
    10. Label1.ForeColor = ForeColor
    11. Else
    12. Label1.BackColor = BackColor
    13. Label1.ForeColor = Grau
    14. PC1.Visible = False
    15. End If


    hoffe ich konnte mich verständlich ausdrücken.

    gruß Jürgen

    CodeTags korrigiert; bitte zukünftig darauf achten, das richtige CodeHighlighting zu verwenden ~VaporiZed

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

    VB.NET-Quellcode

    1. ​My.Computer.Network.Ping
    würde ich nicht mehr verwenden, lieber etwas Aktuelleres.

    VB.NET-Quellcode

    1. Public Shared Function Ping(HostName As String, Optional Timeout As Integer = 100) As Boolean
    2. Using p = New Net.NetworkInformation.Ping()
    3. Dim Status = p.Send(HostName, If(Timeout < 0, 0, Timeout)).Status
    4. Return Status = Net.NetworkInformation.IPStatus.Success
    5. End Using
    6. End Function
    #BlueLagoonX
    ok klar natürlich auch was aktuelleres.
    Da ich echt noch ein Anfänger bin - wie würdest Du das mit meiner oben genannten Abfrage umbauen das ich eben die Function nutzen kann.
    Mit Functionen habe ich mich bisher noch nicht beschäftigt und hab leider keine Ahnung wie ich diese für meine Abfrage anbauen kann.

    Könntest Du mir hier helfen?

    Dankeschön im Voraus

    Jürgen_D schrieb:

    hoffe ich konnte mich verständlich ausdrücken.
    So bald Du zwei Adressen abfragst, wird die Antwort der ersten von der zweiten überschrieben.
    Von wie vielen Adressen reden wir hier?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    #RodFromGermany
    wie ich in meinem ersten Post geschrieben habe 60 Stück!
    ich habe 60 if Anweisungen (siehe oben) nacheinander weil ich somit genau farblich sehen kann welcher PC ist Online und wer nicht - dieser wird dann auch nicht angezeigt.
    Autsch. 60 If-Anweisungen klingen sehr … ineffizient.
    Da wär es besser, 60 Instanzen eines (!) UserControls zu haben und diese in einer Schleife zu aktualisieren.
    Allerdings: Du hast das Thema mit VB6 markiert, also einer 20 Jahre alten Sprache. Ist dem so oder sind wir hier doch in VB.NET unterwegs?

    btw: Wenn Du jemanden ansprechen willst, sodass er eine zusätzliche Forenmitteilung bekommt, verwende nicht #, sondern @, also @Jürgen_D
    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.
    @Jürgen_D -> sehen kann welcher PC ist Online und wer nicht. Mit einem Ping kannst Du feststellen ob ein PC im Netzwerk erreichbar ist, aber nicht ob der PC auch online, also hoch gefahren ist da die meisten Netzwerkkarten auf einem Ping antworten können, obwohl der PC herunter gefahren ist da die Netzwerkkarte weiterhin mit Strom versorgt wird. Es sei denn Du ziehst den Stecker oder legst den Netzschalter um. ;)
    Mfg -Franky-
    Erstmal sorry natürlich ist es VB.net!
    Habe ich falsch ausgewählt.
    @-Franky- mir langt die Pingrückgabe aus!

    @VaporiZed das mit 60 If Anweisungen nicht schön ist und das es sicher viel bessere Lösungen gibt ist mir klar. Hintergrund ist einfach ich bin noch nicht so lange im Thema Programmieren bzw. eher sehr sporadisch aktiv bin - so das ich mit Schleifen Anweisungen usw. einfach noch keine Ahnung habe.

    meine kleine Anwendung macht ja aktuell auch genau das was ich von ihr möchte!
    Es ist halt nur so das durch die Pingabfrage bei nicht eingeschalteten PC zuoft ein Ping gesendet um die Erreichbrkeit zu prüfen und es somit sehr lange dauert bis die 60 PC-Adressen abgefragt sind. Deshalb wollte ich wissen kann man ähnlich wie beim CMD Ping -n 1 einen Parameter mit ausführen um nur 1 Ping zu senden.

    Gruß Jürgen

    Jürgen_D schrieb:

    mir langt die Pingrückgabe aus!
    Was passiert damit?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Jürgen_D schrieb:

    Mehr brauche ich nicht.
    Die Ping-Abfrage lässt sich natürlich in einem Thread machen, die Anzeige dagegen erfolgt im GUI-Thread.
    Wenn Du das parallelisieren willst, brauchst Du schon etwas mehr Kenntnisse.
    Da Du, wie Du schreibst,
    echt sehr Anfängermässig unterwegs
    bist, solltest Du überlegen, wieviel Aufwand Du treiben willst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!