Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Checken ob Ping erfolgreich war?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Christoph



Anmeldungsdatum: 07.04.2006
Beiträge: 108
Wohnort: NRW, Rietberg

BeitragVerfasst am: 26.01.2008, 15:13    Titel: Checken ob Ping erfolgreich war? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 26.01.2008, 15:52    Titel: Antworten mit Zitat

Ja, die gibt es..
Ich habe mal die Optionen von Ping angeschaut (einfach in der Befehlszeile Ping eingeben, dann kommen die Optionen)happy
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) happy
-die Unterdrückung der Ausgabe von Ping.Exe
(eine Übergabe von " >Nul" als Teil des Parameters scheitert leider.. traurig)
..aber funktionieren tut es wenigstens zwinkern
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 vor lachen auf dem Boden rollen
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christoph



Anmeldungsdatum: 07.04.2006
Beiträge: 108
Wohnort: NRW, Rietberg

BeitragVerfasst am: 26.01.2008, 16:49    Titel: Antworten mit Zitat

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= ? zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 26.01.2008, 17:07    Titel: Antworten mit Zitat

Hallo,

ich habe den Code mal entsprechend verändert. Der sollte jetzt funktionieren: http://www.freebasic-portal.de/fbporticula/446 lächeln

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christoph



Anmeldungsdatum: 07.04.2006
Beiträge: 108
Wohnort: NRW, Rietberg

BeitragVerfasst am: 26.01.2008, 17:23    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 26.01.2008, 17:24    Titel: Antworten mit Zitat

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* grinsen
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christoph



Anmeldungsdatum: 07.04.2006
Beiträge: 108
Wohnort: NRW, Rietberg

BeitragVerfasst am: 26.01.2008, 18:15    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 26.01.2008, 19:06    Titel: Antworten mit Zitat

Na, wenn du einen halbwegs lauffähigen Code hast, mit dem es Probleme gibt:
Da können wir doch drüber sprechen.. lachen
..allerdings nur, wenn du den Code auch zeigst(wie Code in FBP-Porticula hochgeladen wird, weißt du ja happy )
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christoph



Anmeldungsdatum: 07.04.2006
Beiträge: 108
Wohnort: NRW, Rietberg

BeitragVerfasst am: 26.01.2008, 20:35    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 26.01.2008, 20:53    Titel: Antworten mit Zitat

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.. zwinkern
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christoph



Anmeldungsdatum: 07.04.2006
Beiträge: 108
Wohnort: NRW, Rietberg

BeitragVerfasst am: 26.01.2008, 21:21    Titel: Antworten mit Zitat

Vielen Dank nochmal für die Hilfe!!

Es funktnioniert einwandfrei!

Praxistest geht auch einwandfrei!happy

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! mit dem Kopf durch die Mauer wollen grinsen

Die aktuelle Version lade ich dann später hoch!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christoph



Anmeldungsdatum: 07.04.2006
Beiträge: 108
Wohnort: NRW, Rietberg

BeitragVerfasst am: 27.01.2008, 15:06    Titel: Antworten mit Zitat

So, hier der Code für die aktuelle Version:
http://www.freebasic-portal.de/index.php?s=fbporticula&mode=show&id=450

Danke nochmals!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 27.01.2008, 15:11    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 27.01.2008, 16:46    Titel: Antworten mit Zitat

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 happy
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 Yahooo!!!!
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz