Die eine Möglichkeit wird in dem Beispiel von Markus praktiziert: Es wird nach der Sendeanforderung eine Pause eingelegt, die so lang ist, daß nach menschlichem Ermessen alle Bytes im Buffer eingetroffen sind. Danach wird festgestellt, wieviele Bytes das sind, und genau diese Anzahl wird gelesen.
Das ist aber nicht die übliche und eleganteste Methode.
Bei Visa-Daten werden in der Regel ASCII-Zeichen verwendet. Also z.B. ein Byte mit dem Wert 255 wird nicht als ein Byte übertragen, sondern entweder Hexadezimal als 2 Bytes mit den ASCII Zeichen "FF", oder manchmal sogar Dezimal als 3 ASCII-Zeichen "255".
Der Nachteil - doppelte oder dreifache Datenlänge - ist offensichtlich. Der Vorteil ist aber, daß man die nicht darstellbaren ASCII-Zeichen 0..31 als Steuerzeichen für den Datenfluß zu Verfügung hat. Und das wichtigste ist das Zeichen für das Ende einer Übertragung. Das ist meist identisch mit dem Zeilenendezeichen 0xA = n.
Voraussetzung daß das funktioniert ist natürlich, daß die Gegenstelle hier mitspielt und das Zeilenendezeichen liefert. Aber in der Regel sollte das der Fall sein. (Wenn nicht - siehe Markus)
Das Beispiel vereinfacht sich dann sehr. Wichtigste Änderung ist: Enable TermChar auf true stellen.