Hallo, ich möchte per Socket von einer Anwendung in C mit einer Website kommunizieren. Socket funktioniert und ich bekomme Daten übertragen. Was mir leider total unklar ist, wie ich auf der PHP Seite die Daten wieder vereinzeln kann. In C übergebe ich einen Buffer mit 1024 Byte zum Beispiel. Um es einfach zu gestalten würde ich 32 Bit Datenwerte hier reinlegen und möchte dann auf der PHP Seite die Werte auf einer Webseite einzeln anzeigen. Wäre nett wenn jemand ein kleines Beispiel hat. Vielen Dank und Grüße Michael
also ... eine Website kommuniziert erstmal nur mit dem User indem sie was darstellt. ... Du möchtest also irgendwelche Daten an einen Webserver senden und diese dann per PHP visualisieren. Da wäre so manches zu klären. C-Programm, schön und gut,auf welcher Platform? PC, Windows, Linux? Du kannst einen Socket zum Server öffnen, was für n Server, welches Protokoll tcp, udp? Wie oft werden die Daten gesendet? Was soll mit den Daten passieren? Ablegen in Datenbank oder nur puffern bis zur nächsten Übertragung?
Dann etwas genauer: ich lese die Daten per PHP ,mittels: while ($out = socket_read($socket, 1024)) { echo $out; } dann gehe ich davon aus meine x*32 bit in der variablen $out zu haben. Wie bekomme ich die Daten getrennt? Michael
Michael schrieb: > Dann etwas genauer: > > ich lese die Daten per PHP ,mittels: > > while ($out = socket_read($socket, 1024)) { > echo $out; > } > > dann gehe ich davon aus meine x*32 bit in der variablen $out zu haben. > Wie bekomme ich die Daten getrennt? > > Michael Zuächst wirst wohl dann auch n PHP_BINARY_READ brauchen sonst bricht die Übertragung ab wenn ein Byte 10 bzw. 13 ist (LF CR). Als Ergebnis bekommste einen String. Und da wirds knifflig ... Du hast nen String aus x Zeichen, das könntest Du per substr zerlegen, weißt aber nicht ob auch jedes Zeichen ein Byte ist, oder ob der Server in UTF-16 oder ISO1252 oder was auch immer encodet ... ich fürchte das wird so fruchtlos sein. Du solltest die Werte in Klartext wandeln vor dem Versand und zwischen den Werten einen üblichen Trenner \t ; , oder was auch immer verwenden. Dann kannste den String per explode einfach zerlegen.
:
Bearbeitet durch User
Keine Ahnung wie fit du dabei bist, aber hier ist ein Beispiel welches mir ganz gut geholfen hat bei einem ähnlichen Problem: http://www.pmoghadam.com/homepage/HTML/c-php-unix-domain-socket.html
Michael schrieb: > Wie bekomme ich die Daten getrennt? Je nachdem, wie die Daten eingetütet wurden: $ulong_array = unpack("L*", $out); $ulong_array = unpack("N*", $out); $ulong_array = unpack("V*", $out);
Man kann die binären Daten auch vor dem Versenden zunächst nach Base64 codieren, dann ist es reiner Text ohne Sonderzeichen, so dass die Frage nach der Textcodierung (ASCII, UTF-x) keine Rolle spielt ... Wenn genug Rechen-Power vorhanden, würde ich die Daten evtl. vor der Transformation nach Base64 noch packen (ZIP?) um einerseits gleich eine Itegritätskontrolle zu bekommen und andererseits den Größenzuwachs durch das Base64-Format zu kompensieren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.