Ralf G. schrieb:
> Ich habe festgestellt, dass mit
> 'server.available()' zwar ein 'WiFiclient'-Objekt erzeugt wird, aber ein
> nachfolgendes 'client.available()' keine Daten 'meldet'.
Das ist logisch.
Der server ist avalilable() sobald eine Verbindung aufgebaut wurde.
Der client ist available() sobald er Daten empfangen hat.
Bei UDP wäre das was anderes, denn da gibt es keinen Verbindungsaufbau.
Wenn du Zeichenketten mit variabler Länge empfangen willst, dann guck
mal von diesem Beispiel ab:
http://stefanfrings.de/esp8266/index.html#tcpsketch
Die Funktion append_until() wird hier wiederholt aufgerufen, um die
empfangenen Zeichen einzusammeln bis ein bestimmtes Trennzeichen (z.B.
Zeilenumbruch) empfangen wird. Danach wird die bis dahin empfangene
Zeichenkette verarbeitet.
Ich bevorzuge in den meisten Anwendungen Zeichenketten gegenüber
Rohdaten, weil man das leichter manuell simulieren kann. Den eventuell
nötigen technischen Mehraufwand zum Parsen von Zahlen gönne ich mir.
Soll der Computer doch für mich arbeiten, nicht umgekehrt.
Ich würde auch immer daran denken, was passiert (bzw. was passieren
soll), wenn mehrere Verbindungen gleichzeitig bestehen. Sollen sie sich
gegenseitig blockieren? Soll nur eine zugelassen werden und die anderen
abgelehnt werden? Einfach nur eine Verbindung verarbeiten und die
anderen ignorieren ist keine gute Idee, denn das steht einer sauberen
Fehlerbehandlung im Weg. Dabei immer auch an das andere Ende der Leitung
denken, wie soll das Fehler erkennen und reagieren?
TCP arbeitet einigermaßen Zuverlässig. Wenn du Daten empfängst, dann
sind sie wahrscheinlich unverfälscht und in der richtigen Reihenfolge.
Du musst aber jederzeit damit Rechnen, das eine Verbindung nicht
aufgebaut werden kann, oder unerwartet abbricht, oder für bis zu einer
Minute stockt, oder eine Bestätigung des Empfängers für erfolgreich
übertragene Daten beim Sender nicht ankommt.