Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#7

AW: TIdTCPServer: erkennen ob String oder Stream?

  Alt 6. Mär 2019, 16:54
Für den Server ist erst einmal alles, was aus dem Socket kommt, ein "Stream". Wenn der von iOS gesendete DataStream aber so wie der von Windows mit einem eindeutigen ZeilenEnde-Terminator endet, kann man auf der Serverseite mit Indy genau bis zu diesem Terminator lesen, z.B. Linefeed. Damit wäre der Windows-Terminator (CR/LF) ebenfalls abgedeckt, man müsste denn nur noch das CR abschneiden.

Der IOHandler hat dazu eine Readn-Methode mit einem frei definierbaren Terminator.
Und wenn in dem Stream CR/LF Bytes vorkommen?
Das halte ich für keine gute Idee.
Wenn CR/LF in den Daten vorkommen können, hat man in beiden Fällen ein Problem, das Ende zu erkennen:

TCPClient.IOHandler.WriteLn(StringDerCRLFEnthält, IndyTextEncoding_UTF8);

kann der Server nicht erkennen, nach welchem CRLF Schluss ist. Das könnte so auch jetzt schon nicht funktionieren.

Es gibt keine Möglichkeit, den "Typ" abzufragen, der im Socket ankommt. Man kommt nur mit Kenntniss des Protokolls weiter.

Wenn die Daten z.B. eine konstante Länge haben, ist es einfach.

Es wäre gut zu sehen, wie bisher die Daten von iOS serverseitig eingelesen wurden.
Michael Justin

Geändert von mjustin ( 6. Mär 2019 um 17:01 Uhr)
  Mit Zitat antworten Zitat