Socket-Problem - Kompression :(
-
Ich habe folgendes Konzept:
Daten -> Kompression -> Senden über Socket .......... Empfangen auf Socket -> Dekompression -> Daten
Und folgendes Problem:
Ich weiss ja beim Empfang nicht, wie groß die zu empfangenden Daten sind (da sie ja komprimiert sind). Wie kann ich nun sicher gehen, dass das gesamte gesendete Datenpaket empfangen wird? Dies ist ja essentiell für die Dekompression!Hilfe!
-
einfach in den ersten x bytes die größe senden??
-
Ja, das wäre eine Möglichkeit. Aber für mich nicht die optimale.
Wie sieht es mit dem recv - Flag MSG_WAITALL aus?
Was meint ihr?
-
Entweder du sendest die Länge am Anfang oder du sendest ein besonderes Endzeichen. Viel anderes wird dir nicht übrigbleiben, weil der Server ja nie wissen kann wieviel der Client ihm denn noch senden will.
-
@Shade Of Mine, Endzeichen ist bei Binärdaten nicht wirklich sinnvoll. Bei Strings geht das schon eher. Der Vorschlag mit dem Senden der Größe in den ersten Bytes ist das einzig wiklich vernünftige.
-
Oder jedes Datenpacket hat eine feste definierte Größe. Ansonsten sollte man, wie schon gesagt, die Größe vorher senden.
-
Hm.
Ich bin jetz mit MSG_WAITALL ziehmlich erfolgreich. Ich habe alle Dateien (ca. 25 Stück) jetzt verlusstfrei übers lokale Netz senden können.