PHP Daten aus Stream übernehmen

Gast #5719363
Lesenswert?

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
#5719582
Lesenswert?

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?
Gast #5719618
Lesenswert?

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
#5719637
Lesenswert?

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.
(Firma: Q3) #5724322
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren