LabVIEWForum.de
Dateiempfang unbekannter Größe über TCP - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenkommunikation (/Forum-Datenkommunikation)
+---- Thema: Dateiempfang unbekannter Größe über TCP (/Thread-Dateiempfang-unbekannter-Groesse-ueber-TCP)

Seiten: 1 2


RE: Dateiempfang unbekannter Größe über TCP - jg - 04.02.2021 14:32

(04.02.2021 09:29 )Martin.Henz schrieb:  Hallo Jens,

nimms mir nicht übel, aber es gibt einen Fall bei dem dein Beispiel nicht funktioniert.

Das Beispiel liest maximal 5000 Zeichen pro Iteration der While-Schleife. Wenn nun also die 5000 Bytes bei Iteration n erreicht sind und dies dummerweise mit dem CR endet, dann kommt erst bei der nächsten Iteration n+1 das LF Zeichen. Die Schleifenbedingung findet in diesem Fall jedoch das CRLR nicht und liest einfach weiter Daten vom Server.
Offtopic2
Hallo Martin,

nehm ich dir nicht übel, damit liegst du vollkommen richtig. Diese Sondergeschichte muss man noch mit abfangen.

Gruß, Jens


RE: Dateiempfang unbekannter Größe über TCP - TpunktN - 04.02.2021 15:02

(04.02.2021 14:32 )jg schrieb:  Diese Sondergeschichte muss man noch mit abfangen.
Hab nochmal meinen letzten Stand hier angehängt, bevor ich das in ein SubVI packe.
Scheint hiermit zu funktionieren, sofern es nur einmal zerhackt wird, ...wovon ich jetzt einfach mal ausgehe.

Danke für die Tipps!
Timo


RE: Dateiempfang unbekannter Größe über TCP - Martin.Henz - 04.02.2021 15:37

Hallo Timo,

diese "$" Zeichen am Ende führt einfach dazu, dass das Suchmuster am Ende des Strings stehen muss. Das ist bei maximal 524288 Bytes und einem Timeout von einer Sekunde hoffentlich immer der Fall?

Ich war auch etwas zu schnell an der Tastatur. Wenn das TCP Read beendet wird, weil ein Timeout aufgetreten ist oder weil die angegebene Anzahl Bytes erreicht wurde und zu allem Übel das letzte Zeichen ein CR ist, dann funktioniert das mit dem CRLF nicht mehr. Da bleibt das LF im Empfangspuffer hängen und auch TCP Read realisiert nicht, dass mit CRLF die Endekennung empfangen wird. Wenn das auftreten kann, dann ist das ein etwas blöder Fall, weil nur wegen dieses eher seltenen Falles das einlesen der Daten nicht mehr so schön funktioniert.