Ho letto il numero Beej's Guide to Network Programming per ottenere un handle sulle connessioni TCP. In uno dei campioni del codice client per un semplice client flusso TCP assomiglia:Gestione del ritorno parziale da recv() TCP in C
if ((numbytes = recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
perror("recv");
exit(1);
}
buf[numbytes] = '\0';
printf("Client: received '%s'\n", buf);
close(sockfd);
ho impostato il buffer di essere inferiore al numero totale di byte che sto inviando. Non sono abbastanza sicuro di come posso ottenere gli altri byte. Devo eseguire il ciclo su recv()
fino a quando ricevo '\0'
?
* Nota sul lato server Sto anche implementando la sua funzione sendall()
, quindi in realtà dovrebbe inviare tutto al client.
Vedere anche 6.1. A Simple Stream Server nella guida.
Un altro approccio è quello di utilizzare byte estremità con speciale valore (come ETX) se si è certi che questo valore non possa apparire all'interno del messaggio, o iniziare il byte (STX) e il byte finale (ETX). È più difficile da gestire dal lato del ricevitore, ma più robusto. Se qualcosa è andato storto e alcuni dati persi durante la trasmissione, il flusso di dati può essere facilmente sincronizzato con STX/ETX, ma in caso di prefisso di lunghezza si scatena l'inferno – qrdl