Registriert seit: 23. Jul 2009
89 Beiträge
Delphi 11 Alexandria
|
AW: Indy TCPServer/TCPClient: RawByteString übertragen?
10. Apr 2017, 17:49
Wenn du mehrere Datenpakete (einzelne Verschlüsselte Strings) in einen Stream wirfst, musst du beim lesen in irgend einer Form erkennen, wo die grenze zwischen 2 Paketen liegt.
Dies kann entweder mit einem eindeutigen Trennzeichen erledigt werden, dass im Rest nicht vorkommen darf.
Finde ich aber nicht optimal, da du da immer den Kompletten Stream durchackern musst um die Blöcke zu bekommen.
Alternativ kannst du zB die Grenzen der einzelnen Pakete am Beginn des Streams mitschicken. So dass der Stream zB So aussieht:
14#2#507#10055__________
14 => die ersten 14 Zeichen beinhalten die Grenzen
2 = Es gibt 2 Blöcke
#507 => Der erste block reicht bis 507
#10055 => Der zweite Block reicht bis 10055
_____=> hier dann die Daten
Mit der Information bewaffnet, kannst du im Client den Stream wieder in die einzelnen Blöcke zerlegen.
Ich würde vermuten, dass die Entschlüsselung in den gleichen Blöcken laufen muss, die Vorher verschlüsselt wurden.
Wenn du Daten komprimierst würde ich nicht mit Strings weiter arbeiten, sondern nur mit TBytes.
Da ist für die Weiterverwendung das Encoding egal und die Daten werden nicht durch irgendwelche impliziten Konvertierungen gefährdet.
Zum Übertragen von A nach B kann man dann den TBytesStream verwenden.
|