Quote:
Originariamente inviato da misterx
siccome in rete trovo tutti esempi come quello da me postato, credo anch'io che sia la #2 il significato della
int Size = Socket->ReceiveLength();
difatti dagli esempi in rete, subito dopo questa chiamata segue sempre una allocazione del buffer
char *Buf;
int ByteRicevuti;
Buf = new char[Size];
ByteRicevuti=Socket->ReceiveBuf(Buf, Size);
scusate per le ripetizioni ma servono per capire.
L'ultimo dubbio che mi resta da sfatare è se ByteRicevuti può avere un valore inferiore del Size stabilito all'inizio tra client e server.
Se così fosse, avrebbe senso una cosa del tipo
while( (ByteRicevuti=Socket->ReceiveBuf(Buf, Size)) > 0);
|
Tipicamente la receive può tornare 0 o -1 a seconda che si sia riscontrata una condizione tipo EOF (cioè per esempio l'altro lato ha chiuso la connessione) o un errore.
Per questo si usa un ciclo come quello da te postato.
Quanto leggere lo decidi esclusivamente tu come Size, non è possibile chiaramente che ByteRicevuti > Size.
Invece è perfettamente possibile avere ByteRicevuti < Size.
Size indica il numero massimo di bytes da leggere ad ogni chiamata.