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:
codice:
char buffer[BUFF_SIZE];
...
// riempio buffer
...
send(socket, buffer, message_size, 0);
// nel caso buffer contenga una stringa message_size = strlen(buffer);
...
client/server
codice:
char buffer[BUFF_SIZE]
...
nBytes = recv(socket, buffer, BUFF_SIZE, 0);
...
// processo 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) ?
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