Forum: PC-Programmierung PHP Daten aus Stream übernehmen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Michael (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.