Hvordan skrive en enkel konsoll File Transfer Socket Program

Opprette en enkel socket program som overfører en fil mellom to servere er en fin måte å utvide dine kunnskaper om socket programmering. En stikkontakt binder seg til en spesifikk port og kobles til en annen stikkontakt for å opprette en toveis forbindelse. Slik sender du en fil, må du opprette en socket, bind det, lytt etter en tilkobling, godta en tilkobling, og deretter sende den til den andre serveren - ved hjelp av "sendfile" -funksjonen.

Bruksanvisning

1 Åpne C-filen i din foretrukne integrert utviklingsmiljø.

2 Ta med header-filer for å få tilgang til alle nødvendige datatyper og funksjoner, ved å legge til følgende kode på toppen av filen:

inkluderer <unistd.h> inkluder <stdlib.h> inkluder <errno.h> inkluder <fcntl.h> inkluder <sys / sendfile.h> inkluder <sys / types.h> inkluder <sys / socket.h> inkluder < sys / stat.h> inkluder <netinet / in.h> inkludere <stdio.h> inkluder <string.h>

3 Erklærer og initialisere variabler som er nødvendige for filoverføring socket, ved å legge til følgende kode på toppen av din viktigste funksjon:

int port = 4455;

int sock_fd;

int sock_desc;

int file_fd;

struct stat stat_buf;

off_t file_offset = 0;

røye filnavn [PATH_MAX];

struct addrinfo adr, * rs;
struct sockaddr_in ADDR1;
int addrlen;

strcpy (filnavn, "minfil.txt");

4 Initialadresse structs, ved å legge til følgende kode:

memset (og adr, 0, sizeof adr);
addr.ai_family = AF_UNSPEC;
addr.ai_socktype = SOCK_STREAM;
addr.ai_flags = AI_PASSIVE;

getaddrinfo (null, port, og ADDR, og rs);

5 Opprett en ny socket, binde socket og sette den til å lytte etter eventuelle innkommende tilkoblinger, ved å legge til følgende kode:

sock_fd = socket (RS-> ai_family, RS-> ai_socktype, RS-> ai_protocol);
bind (sockfd, RS-> ai_addr, RS-> ai_addrlen);
lytte (sock_fd, 1);

6 Lag en "mens" loop og vente på en innkommende tilkobling, ved å skrive inn følgende kode:

while (true) {
sock_desc = akseptere (sock_fd, (struct sockaddr *) og ADDR1, og addrlen);

7 Åpne filen du vil overføre og sende den med "sendfile" funksjon, ved å legge til følgende kode:

file_fd = open (filnavn, O_RDONLY);
fStat (file_fd, og stat_buf);

file_offset = 0;
sendfile (sock_desc, file_fd, og file_offset, stat_buf.st_size);

8 Lukke filen, socket descriptor og kontakten når du er ferdig å sende filen, ved å legge til følgende kode:

close (file_fd);
close (sock_desc);
}

close (sock_fd);

9 Lagre kildefilen. Kompilere og kjøre programmet for å sende en fil ved hjelp av en stikkontakt.

Hint

  • Legg feilhåndtering for funksjoner for å forhindre krasj og gir informasjon om feilen, slik at brukeren kan fikse det.