recv Variable Grösse

dadevelopa

Mitglied
Hallo zusammen,
ich schreibe gerade eine Client-Server Applikation, bei welcher der Server recht unterschiedliche Mengen an Daten an den Client schickt.
Das Problem ist nun: Wie kann ich im Client alle Daten sicher empfangen, ohne das etwas verlohren geht?
Momentan benutze ich eine statische Buffergrösse von 4096 Zeichen, jedoch halte ich das nicht für eine optimale Lösung:
Code:
char data[RECEIVE_BUFFER];

recv(theSocket,
     data,
     RECEIVE_BUFFER,
     MSG_PEEK);
Gibt es eine möglichkeit Daten in einer Schleife solange zu Empfangen, bis nichts mehr kommt?
 
Die sicherste Möglichkeit wäre, vor den Daten eine Länge zu schicken. Dann weiss der Server, ob das angekommene Paket schon komplett ist, oder er noch auf mehr Daten warten muss.

Immer den Rückgabewert von recv auswerten! Im lokalen Netz mag das zwar so klappen, aber in da draussen wirst du Pakete durchaus zerstückelt empfangen. Die musst du dann per Hand zusammensetzen: Schleife recv, neue Daten, an alte Daten anhängen.
 
Zurück