Al recibir los datos de un socket en un búfer, es importante para detectar cuando el socket se cierra de modo que usted no tiene que esperar para los paquetes adicionales por tiempo indefinido. La API de Windows Sockets (Winsock) proporciona una interfaz para el programa C para interactuar con la pila de protocolos TCP / IP subyacente. Recopilar la información del servidor, crear un socket, conéctelo a la acogida y recibir datos con la función "recv" en un búfer hasta que se recibeun mensaje de "TCP FIN" error o.
Búfer de recepción
Abra el archivo C en un editor como Microsoft Visual Studio Express.
Incluya las cabeceras necesarias para trabajar con sockets y archivos añadiendo el siguiente código al principio del archivo:
# Include winsock2.h
# Include ws2tcpip.h
# Include stdio.h
Recuperar la información de host con la función "getaddrinfo" agregando el siguiente código en su función:
struct consejos addrinfo, * res;
int sfd;
carbón buffer [512];
int nrecv;
memset (consejos sizeof);
hints.ai_socktype = SOCK_STREAM;
hints.ai_family = AF_UNSPEC;
getaddrinfo ("www.server.com", "3500", s);
Cambie la dirección del host de "www.server.com" y el puerto de "3500" con la información para el servidor que se está conectando. El valor "SOCK_STREAM" indica el zócalo usará TCP, que es una conexión de dos vías fiable.
Crear un socket con la información del host añadiendo el siguiente código:
SFD = socket (res-ai_family, res-ai_socktype, res-ai_protocol);
Conecte el enchufe con la función "connect", utilizando el descriptor de archivo de la función "socket", añadiendo el siguiente código:
connect (SFD, res-ai_addr, res-ai_addrlen);
Abra un archivo para escribir en la función "fopen" agregando el siguiente código:
FILE * fp;
fp = fopen ("file.rar", "wb");
Recibir información en el búfer con la función "recv" agregando el siguiente código:
num_written int = 0;
while ((nrecv = recv (SFD, tampón, tampón sizeof, 0)) 0) {
char * pBuf = amortiguación;
mientras que (nrecv 0) {
num_written = fwrite (pBuf, sizeof (char), nrecv, fp);
pBuf + = num_written;
nrecv - = num_written;
}
}
El bucle continuará recibiendo información hasta un error, que devuelve un valor negativo, o hasta que se recibe un mensaje de "TCP FIN", que tiene un valor de 0.
Guarde el archivo en C, compilar y ejecutar el programa para recibir información de la conexión de socket.
No hay comentarios:
Publicar un comentario