Ping-Klasse, Do Loop-Schleife & StreamWriter-Probleme

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

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

    Ping-Klasse, Do Loop-Schleife & StreamWriter-Probleme

    Hi
    ich bin langsam am Verzweifeln.

    Visual Basic-Quellcode

    1. Sub Main(args() As String)
    2. Dim ip As String = args(0), pfad As String = args(1)
    3. 'Dim ping As New Ping
    4. Using fs As New FileStream(pfad, FileMode.OpenOrCreate), sw As New StreamWriter(fs), ping As New Ping
    5. Do
    6. sw.WriteLine(ping.Send(ip).Status)
    7. Loop
    8. sw.Close()
    9. Console.ReadKey()
    10. End Using
    11. End Sub

    Das Problem ist hier folgendes: Wenn ich den sw.WriteLine(...) so schreibe, ohne die Do Loop, dann macht er mir auch ganz brav, was er soll. Sobald ich aber die Zeile in die Do Loop stecke, schreibt er mir nichts raus.

    Meine erste Theorie war, dass die Do Loop Schleife das Ergenis des Pings gar nicht abwartet, und einfach weiter macht. Aber dann wäre ja das ganze Prinzip von Schleifen im A...

    Die zweite wäre dann, dass der StreamWriter dadurch, dass ich die Do Loop beende, indem ich Strg+C drücke, den Sream nicht abschließt. Also habe ich vor End Using noch ein sw.Close() eingefügt...Hat auch nix gebracht.

    Was mich aber wirklich nervt und auch schon zur Weißglut bringt, ist die Tatsache, dass, wenn der Ping erfolgreich war, dann schreibt er mir das auch in die Datei weg. Ebenso auch wenn ich zuerst eine Verbindung habe, dann wieder nicht. Dann schreibt er mir den Teil, wo ich Verbindung habe, in die Datei. Aber wenn ich zuerst keine Verbindung habe, dann schon und dann wieder nicht, dann schreibt er den Teil in dem ich zuerst keine Verbindung habe, dann den in dem ich wieder eine habe, aber nicht den, in dem ich wieder keine habe.

    Ich hab auch schon versucht, mir den Inhalt von sw.WriteLine(...) anzuzeigen (Console.WriteLine(ping.Send(ip).Status)). Da zeigt er mir dann an, dass es keine Verbindung hat (er gibt mir hier den Code 11003 aus, der für DestinationHostUnreachable steht).
    Aber langsam verstehe ich es nicht mehr. Wenn ich eine Do Loop Schleife habe, dann macht der das bis ich es irgendwie beende(Strg+C). Wenn ich dann sage mach in der Endlosschleife "schreibe in die Datei xyz.txt bitte den Wert aus ping.Send(ip).Status, also einen IPStatus-Integer-Wert und der gibt mir den Statuswert nur zurücke und schreibt ihn auch, wenn der Ping erfolgreich war und sonst gibt mir der den Wert zurück, schreibt ihn aber nicht in die Datei...Da kann doch irgendwas nicht stimmen, oder sehe ich das falsch?
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Das isses ja eben, ich habe keine Abbruch bedinung. Des soll so ähnlich ablaufen wie der Win CMD Befehl ping x.x.x.x -t => ein Dauerping. Er soll (theoretisch) unendlich oft immer wieder sw.WriteLine(ping.Send(ip).Status) ausführen. Das ganze beende ich halt mir Strg+C
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Ansich wartet die normale Ping.Send Methode schon auf das Ergebnis. Ping.SendAsync macht dies asynchron.

    Wie jedoch @sonne75 schon schrieb wird die Schleife nicht beendet und somit wird der Stream auch nicht geschlossen.
    Warum verwendest du hier eine Schleife?

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    also zu deiner ersten aussage: warum geht das dann aber, wenn der ping erfolgreich war? also warum schreibt er mir dann in die datei wenn er pingen konnte? bzw ich kann wenn der ping erfolgreich war, die text datei auch mit notepad öffnen und es zeigt mir die einrtäge auch an, nur wenn eben kein ping stattfindet, dann schreibt er mir gar nichts rein und ich kann die datei trotzdem aufmachen.
    und zu deiner frage: wie gesagt, danmit ich einen endlos-ping erzeuge. eigentlich soll es mir ja auch nicht anzeigen, was für einen status die verbindung hat, sondern die konsolenanwendung ist dafür da, mir anzuzeigen, ob eine ping verbinung zur übergebenen ip da ist. ich rufe dieses programm mit einem andern programm über shell(ip,pfad) auf.

    edit: also laut debugger steht in status "DestinationHostUnreachable" drinnen
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Also ich schreibe nur sehr ungen in capslock aber ich hoffe dass diese mal jeder der das liest auch versteht, was ich versuche zu sagen:
    WENN der ping ERFOLGREICH war DANN und NUR DANN schreibt er mir den erfolgreichen ping versuch auf. auch wenn ich vorher KEINE verbindung hatte und dann SCHON, schreibt er mir zu erst die nicht-verbindung und dann die verbindung auf. sollte ich aber dann wieder das signal verlieren, schreibt er nichts mehr in die datei.
    also es hat nichts mit dem stream oder der enumeration zu tun. es hat, so meine theorie, etwas mit der do loop zu tun.
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Wenn du es nicht testen willst, dann lass es doch. Aber dann frag doch auch nicht nach... Du könntest es in 1 Minute klären, indem du den Code, wie ich gezeigt habe, ausschreibst und einen Haltepunkt setzt, dann dir die Werte anschaust. Aber anstatt es zu tun, schmetterst du alles ab und bringst "deine Theorie" rein, die keinen Sinn macht. Was erwartest du jetzt noch von uns?
    also gut, ich habs grad probiert das mit dem Haltepunkt. Da wird mir "DestinationHostUnreachable" als inhalt von status angezeigt. also das gleiche wie vorher. Aber nochmal: es geht mir hier nicht darum das mit dem ping zu lösen, sondern darum heruas zu finden, warum mir der streamwriter keine zeile schreibt, obwohl der wert, oder was auch immer ich in sw.writeline() einsetze, mit ja z.b. in der console angezeigt wird.
    und sry dass ich euch so angepmpt habe
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Habs grad am Debugger verucht. es kommt trotzdem destination host unreachable als inhalt vom status raus.
    habs auch mit dem .Flush versucht. jetzt schreibt er mir auch die nicht-verbindung auf(danke 3daycliff)

    danke an alle!
    hab da aber vlt noch eine frage: weis jemand ne mgl, wie man eine consolenanwendung so startet, dass keine icons in der taskleiste erscheinen?
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

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