Wann ist client fertig mit Senden der Daten?

Hallo,

ich bin gerade dabei etwas zu bauen, was Daten eines Smartphones empfängt und diese dann verarbeitet, bis diese Daten zum Test zurückgesendet werden sollen.

Momentan sendet das Handy (verbunden mit dem Arduino Server) Zahlen als ASCII an das Arduino Board.
Die Daten, die das Handy sendet werden dann abgefangen und abgefragt mit einer ganz normalen Schleife wie man sie aus dem Wifi Beispiel kennt.

Sagen wir mal c == '1'.

char c ist das was der client sendet. (client.read())

Einzelne Zahlen dienen als Anweisung.

Bei 1 soll er etwas bestimmtes mit den kommenden Daten anstellen.

Nun bin ich soweit gekommen, dass der Arduino nicht mehr weiss wann stopp ist und
somit nicht mit den bekommenen Daten weiterarbeiten kann.

Mit client.readBytes(buf, len) lese ich die kommenden Daten.
Diese enthalten (in ASCII) so gut wie alle Zeichen bzw. werden so gut wie alle Zeichen enthalten.
Also kann ich nicht mehr abfragen, ob ein bestimmtes Zeichen enthalten ist, um diese Daten weiter zu verarbeiten.

Ich habe es versucht mit if (client.readBytes(buf, len) > 0) , doch client.readBytes(buf, len) ergibt immer 0.

Ich habe auch versucht einen String jeden char aufnehmen zu lassen und dann über das Smartphone, einen "Schlussstring" zu senden. Diesen dann abzufragen mit String.endsWith(), doch diese Methode funktioniert komischerweise nicht.

Meine Frage ist wie ich abfragen kann, wann ein client fertig ist Daten zu senden, um dann mit den empfangenen Daten zu arbeiten?

Wenn Du eine saubere Übertragung willst, dann solltest Du ein Startzeichen und ein Endezeichen in Deiner Nachricht vorsehen. Diese können ja durchaus aus dem Nichtdruckbarem Teil der ASCII-Zeichen oder aus dem Bereich > 127 sein.

Gruß Tommy

Zuerst einmal: wie erfolgt die Übertragung vom Smartphone, welche Hardware, welches Protokoll, welche Bibliothek für Client?

Hi

...normalen Schleife wie man sie aus dem Wifi Beispiel kennt.

Sagen wir mal c == '1'.

ifschleife klick mich

Zu Deinem Problem:
Wenn Du sowohl die Anweisung wie auch die Daten als ASCII sendest, sehe auch ich kein Problem, dort eine 0xFF oder 0x00 als Start/Stop einzubinden - Beide gibt Es nicht im 'druckbaren Bereich'.
Alternativ übergibst Du als Erstes die Länge der nun folgenden Daten - also '28' - diese zwei Zeichen (0x32, 0x38), sagen dem Empfänger, daß jetzt noch 28 Zeichen kommen.
Netter Nebeneffekt: man kann den Datenstrom mitlesen und das Terminal kann Diesen fehlerfrei anzeigen (eben ASCII).

MfG

Die Daten kommen normalerweise recht schnell. Für den Fall, dass mal was hängt oder ein Endekennzeichen verschluckt wird, solltest du noch einen Timeout mit einbauen.