W&T verbindet
Interfaces für TCP/IP, Ethernet, RS-232, RS-485, USB, 20mA, Glas- und Kunststoff-LWL, http, SNMP, OPC, Modbus TCP, I/O digital, I/O analog, ISA, PCI

Applikation zur pure.box:

Einfacher TCP Echo-Server mit PHP

Ausführung eines PHP-Skriptes bei Datenempfang an einem TCP-Port.


Die pure.box ist in der Lage bei Datenempfang (Übertragung per TCP oder UDP) mit dem Aufruf eines PHP-Skriptes zu reagieren. Die empfangenen Daten können via PHP eingelesen und weiterverarbeitet werden (z.B. Antwort an Datenquelle, Weitergabe über das Netzwerk oder Speicherung in boxinterner Datenbank). Der PHP-Interpreter arbeitet hier ausschließlich "unter der Haube", es wird keine klassische Ausgabe in Form einer Webseite generiert. Diese Funktionalität ermöglicht die Realisierung einfacher Serveranwendungen, lediglich mit dem Einsatz von Webtechnik.

Aufgabenstellung

Zum Testen einer Netzwerkverbindung soll auf der pure.box ein auf den TCP-Port 8000 lauschender Echo-Server eingerichtet werden. An diesen Port gesendete Daten sollen anschließend unverändert an die Quelle retourniert werden.

Die für die Umsetzung dieses Beispiels benötigte PHP-Datei echo.php kann hier heruntergeladen werden.

Konfiguration der pure.box

Speichern Sie die Datei echo.php per FTP oder über die SMB-Freigabe im Ordner programs auf der pure.box ab. Anschließend sind folgende Konfigurationsschritte notwendig:

  • Rufen Sie die Startseite der pure.box durch Eingabe der IP-Adresse in der Adresszeile Ihres Browsers auf.

    Homepage Motherbox
  • Wählen Sie Anmelden im Menübaum und loggen Sie sich über den aufgerufenen Dialog mit Ihrem Passwort an.

    Logindialog Motherbox
  • Navigieren Sie auf die Seite Home >> Konfiguration >> Eigene Dateien. Klicken Sie in der Dateiübersicht auf den Ordner programs. Die Datei echo.php wird sichtbar.

    Dateibrowser Motherbox
  • Ein Klick auf das Icon Dateieigenschaften bearbeiten (links neben echo.php) öffnet den Bearbeiten-Dialog.

    Dateieigenschaften bearbeiten
  • Aktivieren Sie die Option Ereignisgesteuert. Wählen Sie TCP und setzen Sie Port auf 8000. Übernehmen Sie die Änderungen mit Speichern... Fertig!

    Ereignissteuerung

Werden jetzt Daten an den TCP-Port 8000 der pure.box gesendet, werden diese an den Versender zurückgeschickt. Voraussetzung für die Retour ist der Empfang eines Zeilenumbruchs (LF / Return-Taste) als Endezeichen. Allgemein muss beachtet werden, dass die Ausführung des PHP-Interpreters nach zwei Minuten automatisch beendet wird. Die programmierte Aktion sollte daher in kürzerer Zeit abarbeitbar sein.

Der Quelltext

In den ersten beiden Zeilen wird der Standard-Input zum Lesen und der Standard-Output zum Schreiben von Daten geöffnet.

$in = fopen('php://stdin', 'r');
$out = fopen('php://stdout', 'w');

In einer Schleife werden die ankommenden Daten zeichenweise engelesen und der String-Variablen $input angehängt. Die Schleife wird verlassen, wenn ein Zeilenumbruch (Line Feed, ASCII-Tabelle: 10) erkannt wird.


$input = '';
do
	{
	$input .= fread($in, 1);
	}
while(substr($input, -1, 1) != chr(10));

Nach dem Empfang wird der eingelesene String über den Standard-Output wieder an die initiierende Datenquelle zurück gesendet.

fwrite($out, $input);

Abschließend wird sowohl der Standard-Input, wie auch der Standard-Output geschlossen.

fclose($in);
fclose($out);

Das PHP-Skript ist hiermit vollständig abgearbeitet und wird verlassen. Bei erneutem Empfang von Daten wird das Skript neu gestartet und läuft wieder wie oben beschrieben ab.

Fazit

Einfache Serveranwendungen können mit der pure.box lediglich mit der Kenntniss von PHP umgesetzt werden. Die Serverfunktionalität ist dabei bereits Bestandteil der pure.box. Es muss nur noch die beim Empfang von Daten auszuführende Aktion programmiert werden.


nach oben