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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.