View Single Post
Old 13-03-2013, 09:04   #9
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12847
Quote:
Originariamente inviato da misterx Guarda i messaggi
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.
WarDuck è offline   Rispondi citando il messaggio o parte di esso