Ciao a tutti,
Fino ad ora mi è capitato di usare i socket solo per progetti universitarì, ma a disanza di anni mi è sorto il dubbio che questi funzionassero solo perchè provati in locale su una sola macchina.
Tipicamente, facevo qualcosa del tipo:
server/client:
client/servercodice:char buffer[BUFF_SIZE]; ... // riempio buffer ... send(socket, buffer, message_size, 0); // nel caso buffer contenga una stringa message_size = strlen(buffer); ...
A questo punto il dubbio: è possibile, in uno scenario reale, che recv non riceva tutta la trasmissione, ma sono una parte (rete lenta, messaggio grande) ?codice:char buffer[BUFF_SIZE] ... nBytes = recv(socket, buffer, BUFF_SIZE, 0); ... // processo buffer
In caso affermativo, come mi assicuro di leggere tutto il messaggio inviato (o al contrario, non leggere anche un eventuale pezzo di un secondo messaggio) ?
Nel caso di stringhe, pensavo di controllare se l'ultimo byte fosse '\0', in caso negativo leggere (aggiungere a buffer) byte per byte fino a trovare il terminatore della stringa.
Nel caso invece di dati "binari" ? conviene che i(l) primo/i byte contengano la dimensione del messaggio?
![]()
Secondo voi è un problema da affrontare nei casi reali, o mi sto perdendo in un bicchier d'acqua?
Grazie a tutti

Rispondi quotando
