Beste allemaal,

Graag zou ik wat data versturen vanuit een telefoon naar een iPad aan de muur. Als "tussenpersoon" had ik mijn NAS in gedachte met daarop een PHP script met Websockets.

Het belangrijkste gedeelte (waarvan ik zelf dacht dat dit het moeilijkste was) heb ik al werkend: de Websocket op de NAS. Ik heb daarvoor dit voorbeeld gebruikt: https://medium.com/@cn007b/super-simple-php-websocket-example-ea2cd5893575

Op de NAS staan nu beide bestanden:

- websockets.php
- websockets.html

Als ik nu op de iPad naar http:\\IP-van-NAS\websockets.html ga, dan zie ik het resultaat van het test-script. (namelijk een teller die iedere seconde update).

Nu moet ik nog iets verzinnen om de data vanuit de telefoon (via het Websocket) naar de html van de iPad te krijgen.

Ik heb een PHP-script in gedachte dat ik ook op de NAS laat draaien, en dat als URL-parameters (via GET) de data vanuit de telefoon "pakt" en op de een of andere manier "doorgeeft" aan het Websocket. Maar hoe?

Hoe krijg ik (in een PHP script) data -die via $data = $_GET['data']; in de variabele $data zit- doorgestuurd naar dat Websocket dat (via websockets.php) op de NAS draait? (om het vervolgens dus in websockets.html zichtbaar te krijgen, dit laatste werkt dus al!)

Alvast heel erg bedankt voor het meedenken.

Groet,

Sjef

Ah, mijn excuses!
Ik had wat (voor hier onnodig) commentaar uit het script verwijderd... Daarom zijn die regels natuurlijk opgeschoven...
Chips! Daar zal ik de volgende keer beter rekening mee houden.

Op regel 50 gebeurt dit:

socket_write($client, $response);

Hier werkt het ook als ik beide "onderdelen" los van elkaar test.
Maar helaas moet ik ze samen kunnen gebruiken anders krijg ik het niet werkend wat ik wil :-)

(variabele "name" heb ik ondertussen ook eruit gehaald)



Er zijn 2 socket_write() he :-)
Namelijk die "van jou" en die wat ik al had om naar de iPad te sturen zegmaar.

Als ik die laatste weglaat dan wordt de HTML/iPad dus niet geupdate. Verder werkt dan wél alles.
Dus de data komt dan wel netjes aan in m'n Putty-scherm...

Het werkt dan zowel met SendToSocket.php als "rechtstreeks" in de browser zoals je voorstelde.
Maar het laatste traject -waarbij de data uiteindelijk bij de iPad komt- werkt dan dus niet (omdat ik socket_write($client, $response); heb weggelaten)
Aha - ik zat zelf inderdaad ook verkeerd te kijken. Dus het probleem treedt op bij het schrijven naar de WebSocket.

Ik heb het hele gebeuren even nagebouwd. Het gaat fout op die socket_write(), maar het probleem zit al in de regel daarboven:

    $response = chr(129) . chr(strlen($content)) . $content . $gestuurdeData;
    socket_write($client, $response);

Geen idee hoe de opbouw van het protocol is, maar je geeft daar dus de lengte van de $content (die op deze manier dus nooit meer dan 255 bytes kan zijn!). Op het moment dat $gestuurdeData niet meer leeg is loopt het protocol in de soep, omdat die niet meegenomen wordt in de lengte.

De oplossing is dus:

    $response = chr(129) . chr(strlen($content . $gestuurdeData)) . $content . $gestuurdeData;
    socket_write($client, $response);

Daar kunnen waarschijnlijk nog wat "oppoets slagen" overheen, maar bij mij werkt het complete verhaal zo.

Ik heb nog wel dit gedaan (ook om de $content binnen de 255 karakters te houden):

  preg_match('/data=(.*?) /',$request,$match);
  $gestuurdeData = $match[1]; //de data

Reageren