 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Christoph
Anmeldungsdatum: 07.04.2006 Beiträge: 108 Wohnort: NRW, Rietberg
|
Verfasst am: 26.01.2008, 15:13 Titel: Checken ob Ping erfolgreich war? |
|
|
Hallo,
ich habe eben das ping Beispiel mit Open Pipe entdeckt
http://www.freebasic-portal.de/index.php?s=code&id=89
Das funktiniert auch prima, aber ich habe eine Frage dazu:
Kann ich überprüfen, ob der Ping Befehl geklappt hat?
Ich bräuchte das so:
Das Programm pingt den Router alle 10min an, wenn der nicht erfolgreich ist, dann soll der nen Programm beenden.
Also, gibt es eine Möglichkeit herauszufinden, ob ein Ping erfolgrich war?
Gruß
Christoph |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 26.01.2008, 15:52 Titel: |
|
|
Ja, die gibt es..
Ich habe mal die Optionen von Ping angeschaut (einfach in der Befehlszeile Ping eingeben, dann kommen die Optionen)
Nein, im Ernst, ich wußte das natürlich schon vorher:
http://www.freebasic-portal.de/index.php?s=fbporticula&mode=show&id=445
Leider bietet Ping keine Möglichkeit, in Intervallen zu Pingen, aber, wenn ich weiß, daß die IP-Adresse antworten müßte, dann reicht es, die Anzahl der Pings auf 1 zu setzen. Damit kann ich dann prüfen, ob ein Rechner 'da' ist.
Es fehlen in dem Beispielprogramm noch 2 Sachen:
-die Zeitschleife(die den angegebenen Zeitabstand benutzt)
-die Unterdrückung der Ausgabe von Ping.Exe
(eine Übergabe von " >Nul" als Teil des Parameters scheitert leider.. )
..aber funktionieren tut es wenigstens
Kuck mal, ob du damit was anfangen kannst..
[Edit]
Christoph hat Folgendes geschrieben: | Ich bräuchte das so.. |
Auftragsarbeiten rechne ich nach HOAI ab, denn es war schon immer etwas teurer, einen besonderen Geschmack zu haben
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
Christoph
Anmeldungsdatum: 07.04.2006 Beiträge: 108 Wohnort: NRW, Rietberg
|
Verfasst am: 26.01.2008, 16:49 Titel: |
|
|
Das ist gut, das sieht schon sehr gut aus...
Nur leider bekomme ich immer:
Ooops, der Router antwortet nicht.. -1
Was die Intervalle angeht, gibt es nen Verzögerungsbefehl oder muss ich das mit sleep machen ?
€dit:// Hab ich iwo das kleingedruckte übersehen, von wegen bezahhlen= ?  |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Christoph
Anmeldungsdatum: 07.04.2006 Beiträge: 108 Wohnort: NRW, Rietberg
|
Verfasst am: 26.01.2008, 17:23 Titel: |
|
|
Besten Dank, das ist so wie ich es brauche, noch leicht die Aktionen modifizieren und dann ist es einsatzbereit!!!
Wunderbar, das ist genau das was ich brauche! |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 26.01.2008, 17:24 Titel: |
|
|
Christoph hat Folgendes geschrieben: | Nur leider bekomme ich immer:
Ooops, der Router antwortet nicht.. -1
| Tja, da könnte ein Blick in die Referenz helfen..
Ist der Rückgabewert von Exec()=-1 deutet das auf ein nicht gefundenes Programm hin!
Du solltest also mal prüfen, ob die von mir verwendete Pfadangabe für 'Ping.Exe' auch auf deinem Rechner stimmt..
Wg. Verzögerung:
[pseudo] Code: |
Anfang=Time
Do
If Not Erledigt Then
Fehler=Exec(Ping, Parameter)
Erledigt=Fehler=0
End If
Loop Until Time>Anfang+Dauer | [/pseudo]
wg. B€zahlen:
Wenn du fragst, wie etwas geht, helfe ich dir gerne(so ich kann)..
Wenn du sagst, ich brauche das und das und so und so, betrachte ich das als Auftrag und der wird nach HOAI abgerechnet *lechz*
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
Christoph
Anmeldungsdatum: 07.04.2006 Beiträge: 108 Wohnort: NRW, Rietberg
|
Verfasst am: 26.01.2008, 18:15 Titel: |
|
|
Also, hm, der Ping.exe Pfad sollte aber eigentlich richtig gewesen sein.
So jedenfalls fumktioniert das schonmal so wie ich mir das vorstelle:
(Der code von Sebastian)
Soweit so gut.
Jetzt habe ich das ganze erweitert, sodass wenn keine Verbindung besteht das Programm beendet wird.
So, jetzt brauch ich nen Tipp wie ich folgendes schaffe:
Das Programm soll folgendes machen:
-Check ob Verbindung besteht ( funktioniert)
-Besteht keine Verbindung: Programm (Offsystem.exe) beenden (funktioniert)
-warten
-Das Programm offsystem.exe neustarten ( befehl funktioniert, nur leider wird das Programm falsch gestartet)
-Wieder an den Anfang vom Programm springen.
Ich brauch jetzt Hilfe bei dem letzen Punkt:
Geht das mit Exit Do und dann am Ende des Programms Call um das Prog wieder aufzurufen?
€dit:// Hab es soweit hinbekommen, weiß auch wo mein Fehler liegt.
Das Problem liegt daran, dass der beim aufrufen mit Shell start mein Freebasic Verezichnis als Arbeitsverzeichnis nimmt!!
€dit2:// Wie kann ich das Arbeitsverzeichnis ändern, indem das Prog aufgerufen werden soll?
Ich habe probiert : Code: | shell "CD /D D:\Programme\OFFSystem "
Shell "START D:\Programme\OFFSystem\offsystem.exe" |
Doch es will nicht, er startet das Prog trotzdem im Freebasic verzeichnis in meinem ordner.
Jemand nen Tipp?
Exit Do funktioniert auch prima, nur wie rufe ich das Prog wieder auf, bei call meckert er ( lang deprecated...)
Gruß
Siedlerchr |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 26.01.2008, 19:06 Titel: |
|
|
Na, wenn du einen halbwegs lauffähigen Code hast, mit dem es Probleme gibt:
Da können wir doch drüber sprechen..
..allerdings nur, wenn du den Code auch zeigst(wie Code in FBP-Porticula hochgeladen wird, weißt du ja )
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
Christoph
Anmeldungsdatum: 07.04.2006 Beiträge: 108 Wohnort: NRW, Rietberg
|
Verfasst am: 26.01.2008, 20:35 Titel: |
|
|
Also, hier der Link zur aktuellen lauffähigen Version von dem Ping Checker
http://www.freebasic-portal.de/index.php?s=fbporticula&mode=show&id=447
Folgendes Funktioniert:
Pingen
-Wenn keine Verbindung:
Ein Programm ( in diesem Falle OFF (http://offsystem.sf.net)) beenden
Warten....
Programm neustarten
Schleife beenden
Was ich noch nicht hinbekommen habe:
-Arbeitsverzeichnis nach D:\Programme2\OFFsystem legen, um dann die offsystem.exe dort aufzurufen.
-Programm erneut aufrufen, damit es immer wieder checkt. |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 26.01.2008, 20:53 Titel: |
|
|
füg doch mal vor dem 2. Shell-Befehl Folgendes ein Code: | CHDIR("D:\Programme2\OFFSystem") | ..oder einen anderen Pfad, falls ich jetzt falsch liege..
Wenn du willst, daß er danach weitermach mit dem IP-Check darfst du nicht 'Exit Do' benutzen, schreibe stattdessen 'Continue Do', dann sollte es gehen.. _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
Christoph
Anmeldungsdatum: 07.04.2006 Beiträge: 108 Wohnort: NRW, Rietberg
|
Verfasst am: 26.01.2008, 21:21 Titel: |
|
|
Vielen Dank nochmal für die Hilfe!!
Es funktnioniert einwandfrei!
Praxistest geht auch einwandfrei!
Jetzt kann ich beruhigt von meinem PC weggehen und habe die Gewissheit, dass der das Programm beendet/neustartet wenn mein Router nicht mehr erreichbar ist.
Ach, das man den chdir ja auch direkt verwenden kann in FB, garnicht dran gedacht!
Die aktuelle Version lade ich dann später hoch!! |
|
Nach oben |
|
 |
Christoph
Anmeldungsdatum: 07.04.2006 Beiträge: 108 Wohnort: NRW, Rietberg
|
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 27.01.2008, 15:11 Titel: |
|
|
In Shellscript unter Linux ist es kein Problem, den Errorlevel abzufragen, z.B.
Code: | #!/bin/ksh
if ping foobar.example.com
then
echo "Antwort erhalten"
else
echo "Keine Antwort erhalten"
fi |
Gerade unter Windows getestet:
Eingabeaufforderung hat Folgendes geschrieben: | C:\Dokumente und Einstellungen\dreael>ping www.hofen.ch
Ping decvefx2.meilebiz.ch [212.254.178.23] mit 32 Bytes Daten:
Antwort von 212.254.178.23: Bytes=32 Zeit=227ms TTL=55
Antwort von 212.254.178.23: Bytes=32 Zeit=73ms TTL=55
Antwort von 212.254.178.23: Bytes=32 Zeit=78ms TTL=55
Antwort von 212.254.178.23: Bytes=32 Zeit=76ms TTL=55
Ping-Statistik für 212.254.178.23:
Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0 (0% Verlust),
Ca. Zeitangaben in Millisek.:
Minimum = 73ms, Maximum = 227ms, Mittelwert = 113ms
C:\Dokumente und Einstellungen\dreael>echo %ERRORLEVEL%
0
C:\Dokumente und Einstellungen\dreael>ping 192.168.33.44
Ping wird ausgeführt für 192.168.33.44 mit 32 Bytes Daten:
Zeitüberschreitung der Anforderung.
Zeitüberschreitung der Anforderung.
Zeitüberschreitung der Anforderung.
Zeitüberschreitung der Anforderung.
Ping-Statistik für 192.168.33.44:
Pakete: Gesendet = 4, Empfangen = 0, Verloren = 4 (100% Verlust),
C:\Dokumente und Einstellungen\dreael>echo %ERRORLEVEL%
1
C:\Dokumente und Einstellungen\dreael>_ |
=> Falls nun FreeBasic ähnlich VB6 auch über SHELL als Funktion verfügt, welche den Befehl synchron ausführt und den Errorlevel zurückliefert, sollte etwas Ähnliches auch kein Problem sein. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 27.01.2008, 16:46 Titel: |
|
|
So, ich habe mal eine etwas elegantere Version für den Ping-Check geschrieben:
http://www.freebasic-portal.de/index.php?s=fbporticula&mode=show&id=452
Es ist noch nicht das Gelbe vom Ei, aber es sieht schon etwas besser aus.
Die Ausgabe von Ping.Exe wird noch nicht unterdrückt(vllt einen anderen Befehl als Exec() ausprobieren..), dafür entfällt aber das lästige Einlesen der Ausgabe von Ping.Exe, da Exec() den Rückgabewert von Ping.Exe liefert:
0=okay
<>0 da stimmt was nicht
[Edit]
Hmm, der Exec()-Befehl war's nicht, Run() fällt auch aus, da blieb nur noch Shell() übrig
Tatsächlich liefert auch Shell() den Status des Ping-Befehls zurück..
..hat aber den Vorteil, daß ich die Ausgabe unterdrücken kann(" >Nul") ohne die Fehlermeldung zu beeinflussen
Hier ist das Ergebnis..
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|