Ping Abfrage einbauen
Moderator: Moderatoren
Ping Abfrage einbauen
Hallo zusammen,
ich möchte auf einem Sicherungsrechner eine Abfrage ins Programm schreiben das das Arbeiten mit dem Programm nur ermöglicht wenn der Hauptrechner auch wirklich aus ist (damit nicht ungewollt Daten vom Hauptrechner auf den Sicherungsrechner geschoben werden und dort alles überschreiben).
Also so in der Art:
ping an Hauptrechner
if ping positiv say "Hauptrechner auschalten!"
loop
Er soll also solange die Abfrage durchführen bis der Hauptrechner nicht ereichbar ist.
Wenn der Ping ins Leere läuft soll weitergemacht werden können.
Die Abfrage würde ich dann am Anfang des Programms schreiben.
Gäbe es auch eine Möglichkeit immer wieder (also auch während des laufenden Betriebes) abzufragen ob ein anderer Rechner via Ping erreichbar ist ohne das System übermäßig zu belasten?
Bin für jedweden Tipp dankbar.
Grüße
Jojo
ich möchte auf einem Sicherungsrechner eine Abfrage ins Programm schreiben das das Arbeiten mit dem Programm nur ermöglicht wenn der Hauptrechner auch wirklich aus ist (damit nicht ungewollt Daten vom Hauptrechner auf den Sicherungsrechner geschoben werden und dort alles überschreiben).
Also so in der Art:
ping an Hauptrechner
if ping positiv say "Hauptrechner auschalten!"
loop
Er soll also solange die Abfrage durchführen bis der Hauptrechner nicht ereichbar ist.
Wenn der Ping ins Leere läuft soll weitergemacht werden können.
Die Abfrage würde ich dann am Anfang des Programms schreiben.
Gäbe es auch eine Möglichkeit immer wieder (also auch während des laufenden Betriebes) abzufragen ob ein anderer Rechner via Ping erreichbar ist ohne das System übermäßig zu belasten?
Bin für jedweden Tipp dankbar.
Grüße
Jojo
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Ping Abfrage einbauen
Pablo Botella ( http://www.xbwin.com )Jojo hat geschrieben:Bin für jedweden Tipp dankbar.
22. Februar 2009
ot4xb.examples
TPing
Code: Alles auswählen
#include "ot4xb.ch"
// ---------------------------------------------------------------------------
proc main()
? Ping( "127.0.0.1" )
? Ping( "www.xbwin.com" )
? Ping( "www.alaska-software.com" )
? "Press a key to close ..."
inkey(0)
return
// ---------------------------------------------------------------------------
function Ping( cHost,nTimeOut)
local o := TPing():New()
local cStr,cIp
DEFAULT cHost := ""
cIp := TPing():cHostByName(cHost,nTimeOut)
DEFAULT cIp := ""
if o:Ping(cHost)
cStr := cPrintf("%s [%s] %ims TTL:%3i",cHost,o:cIp,o:nTime,o:nTtl)
else
cStr := cPrintf("%s [%s] -> FAIL",cHost,cIp)
end
o:Destroy()
return cStr
gruss by OHR
Jimmy
Jimmy
Re: Ping Abfrage einbauen
Hallo Jimmy,
vielen Dank für die schnelle Rückantwort.
Ich habe mich aber doch dazu entschieden nur beim Programmstart einmalig eine Abfrage zu starten.
Aber auch da habe ich so meine Probleme...
Deshalb eine Frage an Alle:
Weshalb gibt dieser Teil im Programm...
...kein .t. zurück obwohl ich in der temp.txt genau meinen Hostnamen finde?
Im Debbuger springt er ab der Zeile "if hr==..." gleich zum Befehl nach"else".
Also erkennt er den korekten Hostnamen nicht. Weshalb?
HELP!
Ich mag FlagShip nicht
Grüße
Jojo
vielen Dank für die schnelle Rückantwort.
Ich habe mich aber doch dazu entschieden nur beim Programmstart einmalig eine Abfrage zu starten.
Aber auch da habe ich so meine Probleme...
Deshalb eine Frage an Alle:
Weshalb gibt dieser Teil im Programm...
Code: Alles auswählen
local hr := ''
run( "hostname >temp.txt 2>&1" )
hr = memoread( 'temp.txt' )
if hr == 'meinHostname'
return(.t.)
else
Im Debbuger springt er ab der Zeile "if hr==..." gleich zum Befehl nach"else".
Also erkennt er den korekten Hostnamen nicht. Weshalb?
HELP!
Ich mag FlagShip nicht
Grüße
Jojo
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Ping Abfrage einbauen
HOSTNAME.EXE ... da muss man erst mal drauf kommen =D>
HOSTNAME > test.txt ... aus Sicht der CMD Box funktioniert das, aber es kann sein, dass es in einem Verzeichnis liegt, das NICHT zu deine EXE gehört.
Je nach Programmstart wird ein anderes Standardverzeichnis verwendet ... also testen mit fixem Namen z.B. dem der EXE.
Hast du das Gleiche mal mit Xbase++ probiert, mit FlagShip kenne ich mich nicht aus.
Aber warum nutzt du nicht die UMGEBUNGSVARIABLE COMPUTERNAME ?
in Xbase++ und Clipper wäre das so gegangen:
mit SET kann man sich ansehen was es sonst noch gibt ...
Zu deinem Code ...
hr == 'meinHostname' ... kann es sein, dass eventuell Blanks oder GROßBUCHSTABEN verwendet werden ?
Ich würde immer so schreiben: lower(alltrim(hr)) == 'meinhostname' // ODER lower('meinHostname')
ich weiß was HOSTNAME > test.txt macht, aber >temp.txt 2>&1 ist mir völlig fremd !
HOSTNAME > test.txt ... aus Sicht der CMD Box funktioniert das, aber es kann sein, dass es in einem Verzeichnis liegt, das NICHT zu deine EXE gehört.
Je nach Programmstart wird ein anderes Standardverzeichnis verwendet ... also testen mit fixem Namen z.B. dem der EXE.
Hast du das Gleiche mal mit Xbase++ probiert, mit FlagShip kenne ich mich nicht aus.
Aber warum nutzt du nicht die UMGEBUNGSVARIABLE COMPUTERNAME ?
in Xbase++ und Clipper wäre das so gegangen:
Code: Alles auswählen
cHostName := getenv("COMPUTERNAME")
Zu deinem Code ...
hr == 'meinHostname' ... kann es sein, dass eventuell Blanks oder GROßBUCHSTABEN verwendet werden ?
Ich würde immer so schreiben: lower(alltrim(hr)) == 'meinhostname' // ODER lower('meinHostname')
Code: Alles auswählen
run( "hostname >temp.txt 2>&1" )
Gruß
Hubert
Hubert
Re: Ping Abfrage einbauen
Hallo Hubert,
"2>&1" leitet STDERR auf STDOUT um.
So (wenn ich es richtig verstanden habe) bekomme ich auch Fehlermeldungen in meine temp.txt.
Ich hatte es ursprüngllich mit...
...drin, aber das brachte auch nichts.
Es liegt aber nicht an der Groß- Kleinschreibung.
Der Inhalt von temp.txt entspricht genau meinem Hostnamen, aber dennoch git es ein .f. aus..
"2>&1" leitet STDERR auf STDOUT um.
So (wenn ich es richtig verstanden habe) bekomme ich auch Fehlermeldungen in meine temp.txt.
Ich hatte es ursprüngllich mit...
Code: Alles auswählen
hr = alltrimm( memoread( 'temp.txt' ))
Es liegt aber nicht an der Groß- Kleinschreibung.
Der Inhalt von temp.txt entspricht genau meinem Hostnamen, aber dennoch git es ein .f. aus..
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Ping Abfrage einbauen
Sorry Jojo,
aber du bist in eine alte Falle getreten: Es ist nicht immer das im Paket, was draufsteht
Mit diesem Testprogramm hier erhalte ich genau deine Ergebnisse, der Rechnername steht zwar anscheinend in der Textdatei, aber ich erhalte .F. beim Vergleich mit ==
Nachdem die Länge mit 7 Zeichen 2 Zeichen länger war als ich vom Namen erwartet hätte, habe ich mir den Inhalt von Zeichen 6 und 7 anzeigen lassen:
"BURO1"+chr(13)+chr(10) ist nunmal nicht genau gleich wie "BURO1"
Der Befehl HOSTNAME fügt eine Zeilenschaltung ein und das hat der Code nicht berücksichtigt.
Im Editor fällt das auch kaum auf, ähnlich wie chr(0), chr(10) oder chr(255) eben nichts drucken, aber dennoch etwas darstellen.
Hättest du per Zufall so gefragt hättest du gleich ein TRUE gesehen (und später über seltsame Fehler gestolpert) :
aber du bist in eine alte Falle getreten: Es ist nicht immer das im Paket, was draufsteht
Mit diesem Testprogramm hier erhalte ich genau deine Ergebnisse, der Rechnername steht zwar anscheinend in der Textdatei, aber ich erhalte .F. beim Vergleich mit ==
Code: Alles auswählen
#include "Gra.ch"
#include "Xbp.ch"
#include "Common.ch"
procedure main()
local cTF := "temp.txt", cTxt, x
runshell("/C hostname.exe > "+cTF)
if fExists(cTF)
? "Testdatei existiert"
cTxt := memoread(cTF)
? "Inhalt : -"+cTxt+"-"
? "Len: ",len(cTxt), "ich erhalte 7, also 2 mehr als ich erwartet hätte ..."
? "Habe ich den Namen erwartet ? ", "BURO1" == cTxt
? "6. ist chr(", asc(cTxt[6]),")"
? "7. ist chr(", asc(cTxt[7]),")"
? "so ginge es ...", cTxt = "BURO1"
? "oder gleich richtig anpassen ..."
x := at(chr(13),cTxt)
cTxt := left(cTxt,x-1)
// welche Zeichen sieht man noch nicht ? chr(0), chr(10), chr(255) ...
? "Habe ich den Namen erwartet ? ", "BURO1" == cTxt
else
? "Datei wurde nicht, oder nicht hier erzeugt !"
endif
wait
return
"BURO1"+chr(13)+chr(10) ist nunmal nicht genau gleich wie "BURO1"
Der Befehl HOSTNAME fügt eine Zeilenschaltung ein und das hat der Code nicht berücksichtigt.
Im Editor fällt das auch kaum auf, ähnlich wie chr(0), chr(10) oder chr(255) eben nichts drucken, aber dennoch etwas darstellen.
Hättest du per Zufall so gefragt hättest du gleich ein TRUE gesehen (und später über seltsame Fehler gestolpert) :
Code: Alles auswählen
if cTxt = "BURO1"
Gruß
Hubert
Hubert
Re: Ping Abfrage einbauen
Hallo Hubert,
an einem Zeilenvorschub oder anderen nicht sichtbaren Zeichen kann es eigentlich nicht liegen.
Der Befehl "ALLTRIM" entfernt eben alles vor und hinter dem Text.
Im Editor ist auch kein Zeilenvorschub oder ähnliches zu sehen.
Der Cursor steht auf dem letzten Buchstaben...
Das ist es ja was ich nicht verstehe.
Der Inhalt meiner temp.txt entspricht meiner Meinung nach exakt meinem Hostnamen.
an einem Zeilenvorschub oder anderen nicht sichtbaren Zeichen kann es eigentlich nicht liegen.
Der Befehl "ALLTRIM" entfernt eben alles vor und hinter dem Text.
Im Editor ist auch kein Zeilenvorschub oder ähnliches zu sehen.
Der Cursor steht auf dem letzten Buchstaben...
Das ist es ja was ich nicht verstehe.
Der Inhalt meiner temp.txt entspricht meiner Meinung nach exakt meinem Hostnamen.
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Ping Abfrage einbauen
Sorry, aber wie wäre es mal mit probieren wie LANG dein String tatsächlich ist !
Ich weiß nicht was Flagships Alltrim() macht, aber weder bei CLIPPER noch bei Xbase++ entfernt ALLTRIM() etwas anderes als Blanks
Nochmals sorry, aber ich konnte nicht anders. Auch meine Geduld ist begrenzt.
Ich weiß nicht was Flagships Alltrim() macht, aber weder bei CLIPPER noch bei Xbase++ entfernt ALLTRIM() etwas anderes als Blanks
Deine MEINUNG ist hier nicht gefragt, sondern testen wie lange der String tatsächlich ist und was an jeder Position steht:Der Inhalt meiner temp.txt entspricht meiner Meinung nach exakt meinem Hostnamen.
Code: Alles auswählen
for x := 1 to len(cVar)
? x, substr(cVar,x,1)
next
Gruß
Hubert
Hubert
Re: Ping Abfrage einbauen
SHIT! Du hast (leider) Recht.
Mein 9 Zeilen langer Hostname wird mit zehn Zeichen angezeigt.
O.K. Danke, jetzt weiß ich wieder in welche Richtung ich muss.
Übrigens: Kein Problem! Ich wäre auch gereizt wenn ich so wenig geschlafen hätte
Grüße
Jojo
Mein 9 Zeilen langer Hostname wird mit zehn Zeichen angezeigt.
O.K. Danke, jetzt weiß ich wieder in welche Richtung ich muss.
Übrigens: Kein Problem! Ich wäre auch gereizt wenn ich so wenig geschlafen hätte
Grüße
Jojo