3 declarar e inicializar las variables necesarias para la toma de transferencia de archivos, añadiendo el siguiente código en la parte superior de su función principal :
int port = 4455 ; sock_fd int , int sock_desc ; int file_fd ; struct stat stat_buf ; off_t file_offset = 0 ; carbón nombre_archivo [ PATH_MAX ] ; struct addrinfo addr, * rs ; struct sockaddr_in addr1 ; int addrlen ; < br >
strcpy ( nombre_archivo , " miarchivo.txt ");
4
Inicializar las estructuras de dirección , añadiendo el siguiente código:
memset (& addr, 0 , sizeof addr ) ; addr.ai_family = AF_UNSPEC ; addr.ai_socktype = SOCK_STREAM ; addr.ai_flags = AI_PASSIVE ;
getaddrinfo (NULL , el puerto , y addr, y rs) ;
5
Crear un nuevo socket , ata el casquillo y la colocó para escuchar las conexiones entrantes , añadiendo el siguiente código:
sock_fd = socket ( rs -> ai_family , rs -> ai_socktype , rs -> ai_protocol ) ; bind ( sockfd , rs -> ai_addr , rs -> ai_addrlen ), escuchar ( sock_fd , 1 ) ;
6
Crear un bucle "while" y esperar una conexión entrante , escriba el siguiente código:
while ( true) { sock_desc = accept ( sock_fd , (struct sockaddr *) y addr1 , y addrlen ) ;
7 < p> Abra el archivo que desea transferir y enviarlo con la función " sendfile " , añadiendo el siguiente código:
file_fd = open ( nombre_archivo , O_RDONLY ) ; fstat ( file_fd , y stat_buf ) ;
file_offset = 0 ; sendfile ( sock_desc , file_fd , y file_offset , stat_buf.st_size ) ;
8
cierre el archivo descriptor de socket y la toma una vez que haya terminado de enviar el archivo, añadiendo el siguiente código:
close ( file_fd ), close ( sock_desc ) ;}
close ( sock_fd ) ;
9
Guardar el archivo de origen . Compilar y ejecutar el programa para enviar un archivo mediante un socket.