Forum: PC-Programmierung PHP Daten aus Stream übernehmen


von Michael (Gast)


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

von Weingut P. (weinbauer)


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?

von Michael (Gast)


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

von Weingut P. (weinbauer)


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.

: Bearbeitet durch User
von Johnny Johnsson (Gast)


Lesenswert?

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

von guest (Gast)


Lesenswert?

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);

von Frank E. (Firma: Q3) (qualidat)


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.

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
Noch kein Account? Hier anmelden.