Was natürlich den Nachteil hat, dass du 3 Bytes mehr versendest und deine Paketlänge begrenzt ist. Nagut, mehr als 2 GB (signed) wirst du wohl kaum erreichen, aber 3 Bytes können bei vielen Paketen 'ne Menge ausmachen.
Wenn außerdem ein Fehler in der Übertragung auftritt und die Länge nicht mit der wirklichen Länge überinstimmt sind alle darauf folgenden Pakete Datenmüll, da ja nicht getestet werden kann wo das neue Paket wirklich anfängt. Vorteil deiner Methode ist das du jedes Zeichen verwenden kannst, da du ja kein Trennzeichen hast.
Kommt also immer drauf an was einem wichtig ist, bei einfachen Strings würde ich Trennzeichen verwenden da diese ja sowieso in keinem normalen Text enthalten sind. Bei Binärdaten funktioniert die Übertragungsweise natürlich nicht fehlerlos, außer man wandelt vorher die Zeichen im Binärkram die das Trennzeichen sind vorher um. (z.B. verdoppeln), dadurch geht natürlich der Gewinn von 3 Bytes unter Umständen verloren, außerdem müssen die Daten vor dem Senden und nach dem Empfangen überprüft und geändert werden.
Die Länge könnte man übrigens auch als Word senden, 64KB dürften für ein Paket reichen...
Schlussfolgerung, wie verschicke ich Binärdaten:
Bei einer TCP-Übertragung dürfte NTQs Methode angebracht sein, da Fehler ja sogut wie ausgeschlossen sind. Bei UDP sieht das natürlich anders aus, die Länge vorher zu schicken würde mit Sicherheit nach kurzer Zeit Fehler hervorbringen. Aber wie schon gesagt, Trennzeichen halte ich für Binärdaten auch nicht gerade geeignet, zumal mir gerade auffällt das eine Verdoppelung der Trennzeichens in den Daten auch Fehler hervorbringen kann, nämlich wenn genau zwischen den beiden Trennzeichen das Paket abgeschnitten wird.
Also, einer eine Idee?
