Criar um programa de tomada simples que transfere um arquivo entre dois servidores é uma ótima maneira de ampliar seu conhecimento de programação de soquetes . A tomada liga-se a uma porta específica e se conecta a outra tomada para criar uma conexão de mão dupla. Para enviar um arquivo , você deve criar um socket, ligá-la , ouvir para uma conexão, aceitar uma conexão e , em seguida, enviá-lo para o outro servidor - utilizando a função " sendfile " . Instruções
1
Abra o arquivo C em seu ambiente de desenvolvimento integrado preferido.
2
Incluir os arquivos de cabeçalho para acessar todos os tipos de dados necessários e funções , adicionando o seguinte código na parte superior do seu arquivo:
# include # include # include # include # include < sys /sendfile.h > # include # include # include # incluem # include < stdio . h> # include
3
Declarar e inicializar as variáveis necessárias para a tomada de transferência de arquivos, adicionando o seguinte código na parte superior de sua principal função :
int port = 4455 ; int sock_fd ; int sock_desc ; int file_fd ; struct Dados stat_buf ; off_t file_offset = 0; carbonizar nome_arquivo [ PATH_MAX ]; struct addrinfo addr , * rs ; struct sockaddr_in addr1 ; int addrlen ; < br >
strcpy ( nome_arquivo , " myfile.txt ");
4
Inicializar as estruturas de endereço, adicionando o seguinte código:
memset (& addr , 0 , sizeof addr ); addr.ai_family = AF_UNSPEC ; addr.ai_socktype = SOCK_STREAM ; addr.ai_flags = AI_PASSIVE ;
getaddrinfo (NULL , porto, & addr , & rs );
5
Criar um novo socket, socket e configurá-lo para ouvir todas as conexões de entrada , adicionando o seguinte código:
sock_fd = socket ( rs -> ai_family , rs -> ai_socktype , rs -> ai_protocol ); bind ( sockfd , rs -> ai_addr , rs -> ai_addrlen ); ouvir ( sock_fd , 1);
6
Criar um loop "while" e esperar para uma conexão de entrada , digitando o seguinte código:
while ( true) { sock_desc = aceitar ( sock_fd , (struct sockaddr *) & addr1 , e addrlen );
7
Abra o arquivo que deseja transferir e enviá-lo com a função " sendfile " , adicionando o seguinte código:
file_fd = open ( nome_arquivo , O_RDONLY ); fstat ( file_fd , e stat_buf );
file_offset = 0; sendfile ( sock_desc , file_fd , e file_offset , stat_buf.st_size );
8
Feche o arquivo , descritor de socket ea tomada uma vez que você é feito o envio do arquivo , adicionando o seguinte código:
perto ( file_fd ) , perto ( sock_desc );}
perto ( sock_fd );
9
Salve o arquivo de origem . Compilar e executar o programa para enviar um arquivo usando um soquete.