Cómo determinar si se recibió recv en la programación del socket
1 Por ejemplo, agregue una marca de fin al flujo de datos, de modo que cuando se lea la marca de fin, sepa que la transmisión se completó y interrumpido. Este método sólo se puede utilizar para transferir archivos de texto, no archivos con terminadores ni archivos binarios.
2. Pase primero una longitud y luego el receptor podrá controlar cuántos bytes de datos deben leerse antes de que se complete. Esto funciona para transferir cualquier archivo.
Ejemplo:
Código C/C++
La función de envío del cliente es: char line[MAXLINE] while ((fgets(line,MAXLINE,fd) ! =NULL) // fd es un puntero al archivo {send (connfd, line,strlen(line),0) // connfd es el socket} La función de recepción del servidor es: for (;;) {if ((n =recv(connfd, recvline,MAXLINE,0)>0)){recvline[n]>0 ){recvline[n]=0;fputs(stdout,recvline);else break;}}
Cuando el remitente deja de enviar, el receptor no tiene forma de saber que los datos se han enviado y, por lo tanto, siempre está en un bucle infinito. En este momento, se puede utilizar el método anterior para determinar si la recepción ha finalizado.