GethostbyName -funksjon på C -språk

GethostbyName -funksjon på C -språk

C -språket har et stort antall funksjoner for programmering av stikkontaktene. Mange av dem brukes til å få nødvendig informasjon fra verten som en forbindelse skal gjøres. Informasjonen som denne typen funksjoner henter er avgjørende for en vellykket forbindelse, siden den involverer domeneadressene, portnumrene og så videre.

I denne Linux -hint -artikkelen vil du lære alt om GethostByName () -funksjonen som ofte brukes til å løse og skaffe IP -adressene fra vertsnavnene.

Vi vil vise deg syntaks for denne funksjonen og den teoretiske beskrivelsen av hvordan den fungerer, dens inngangs- og utgangsargumenter, datatypen som brukes i hvert tilfelle, og dens riktige erklæring.

Vi bruker deretter det vi lærte gjennom de praktiske eksemplene, inkludert kodebit og bilder, der vi implementerer GethostByName () -funksjonen for å løse og skaffe vertsnavn -adressene.

Syntaks av GethostByName () -funksjonen på C -språk

struct Hostent *gethostbyName (const char *name);

Beskrivelse av GethostByName () -funksjonen på C -språk

GethostByName () -funksjonen returnerer IP -adressen, offisielt navn og adressefamilie av et vertsnavn. Denne funksjonen ber serveren om å løse og returnere adressen til vertsnavnet som er spesifisert som en streng eller peker til den i sitt enkeltinngangsargumentnavn.

Hvis ingen feil oppstår, returnerer gethostByName () en peker til en struktur av typen "hostent" som lagrer vertsnavninformasjonen. Hvis det oppstår en feil, returneres en nullpeker og feilidentifikasjonskoden kan hentes via H_Erno Global Variable.

Vertsnavn er vanligvis assosiert med en enkelt adresse, men det er tilfeller av store plattformer som har flere tilknyttede adresser som “www.Google.com ”. Av denne grunn er de "hostent" strukturer designet for å inneholde en liste over adresser. Hver av dem kan nås ved hjelp av "h_addr_list" -arrayen av pekere. Lenger fremover er det en spesiell seksjon som forklarer alt om denne typen strukturer.

Selv om GethostByName () -funksjonen anses som utdatert og har blitt erstattet av GetAddrinfo (), gjør dens enkelhet i metodepåvidelse og inngangsargumenter det veldig nyttig når du bare trenger adressen til et vertsnavn.

GethostByName () -funksjonen, så vel som alle andre funksjoner i GethostXXXX () -familien, strukturer og variabler de bruker, er erklært i “NetDB.h ”header. Så du må inkludere dem i koden din som i følgende:

#inkludere

Hvordan få adressen til et vertsnavn med GethostByName () -funksjonen på C -språk

I dette eksemplet vil vi bruke GethostByName () -funksjonen for å få adressen og det offisielle navnet på “Www.kjerne.org ” Vertsnavn.

Trinn 1: Det første trinnet er å sette inn de nødvendige overskriftene og lage en hovedfunksjon () som returnerer en tom verdi.

Steg 2: Inne i Main () -funksjonen erklærer vi pekerverten for en struktur av typen som fungerer som fungerer som utgangsargumentet til GethostByName (). Vi erklærer også en 256-tegneserie kalt "buffer" som lagrer strengen som inneholder navnet på verten som vi passerer som inngangsargumentet.

Trinn 3: Etter å ha erklært variablene og strukturen som vi bruker, kaller vi GethostByName () -funksjonen, og passerer bufferen som inngangsargumentet og vertsstrukturen som utgangsargumenter.

Trinn 4: Hvis funksjonen kommer tilbake, er neste trinn å vise det offisielle navnet og adressen. For dette bruker vi printf () -funksjonen i to samtaler. Den første samtalen viser det offisielle navnet på domenet, en streng som er pekt på av H_Name -elementet i vertsstrukturen. Den andre samtalen viser adressen som er lagret i h_addr_list [0], definert som h_addr, som vi konverterer til en streng ved hjelp av inet_ntoa () -funksjonen.

Følgende er den komplette koden med alle fire trinn for dette eksemplet:

//Trinn 1
#inkludere
#inkludere
#inkludere
#inkludere
#inkludere
#inkludere
tomrom ()
//Steg 2

Structhostent *vert;
char buffer [255] = "www.kjerne.org ";
// Trinn 3
vert = gethostByName (buffer);
// Trinn 4
printf ("\ nip adresse til %s er:", host-> h_name);
printf ("%s \ n \ n", inet_ntoa (*(structin_addr*) host-> h_addr));

Følgende bilde viser sammenstilling og utførelse av denne koden. Som vi kan se, innhenter GethostByName () en informasjon fra “Www.kjerne.org ” domene og lagrer det i en "hostent" struktur.

Den hostente strukturen

Den "hostent" strukturen lagrer nyttige data som er gitt av serveren når en spørring er laget med funksjoner som GethostByName (). Denne sokkelforbindelsen er forhåndsberegnet for å løse adressene og returnerer informasjonen som domenenavnet, adressefamilien og en liste over adresser hvis mer enn en eksisterer. Du kan se denne strukturen sammen med en detaljert beskrivelse av hvert element i følgende:

struktur hostent

char *h_name;
char ** h_aliases;
INTH_ADDRTTYPE;
INTH_LENGTH;
char ** h_addr_list;
#defineh_addrh_addr_list [0]
;

h_name: Dette er en peker til en streng med domenenavnet som den spørres.

H_aliases: Det er en liste over alternative navn.

h_addrtype: Dette medlemmet spesifiserer adressefamilien som det spørres.

H_Lengde: Den spesifiserer størrelsen på adressen.

h_addr_list: Dette er pekeren til en liste over adressepekere. Hvis serveren returnerer mer enn én adresse for det spørte navnet, er hver tilgang til via denne listepekeren.

H_addr: For enkelhets skyld definerer denne strukturen H_addr som en peker til den første adressen i h_addr_list. Tilgang er gjennom denne definisjonen.


Feil som kan oppstå når du bruker GethostByName () -funksjonen: Hvordan gjenkjenne og identifisere dem

GethostByName () -funksjonen returnerer en nullpeker i tilfelle en feil. Den enkleste måten å oppdage en feil er å bruke en "if" -tilstand der inngangstilstanden er utgangspekeren med en nullverdi. Følgende er et kodebit som viser denne teknikken:

if ((host = gethostByName (buffer)) == null)
printf ("Det oppstod en feil mens du prøvde å få informasjon fra serveren.");

Når det oppstår en feil, lagres den numeriske identifikasjonsverdien automatisk i H_Erno Global Variable. Definisjonene av feilene og deres numeriske representasjon er spesifisert i “Netdb.h ” Overskrift.

Følgende er et utdrag fra “NetDB.H ”-overskrift med feilene som GethostByName () -funksjonen kan generere, deres numeriske verdi i H_errno, og en kort beskrivelse av hver feil:

Definisjon Verdi Feil
Host_not_found 1 Verten ikke funnet.
PRØV IGJEN 2 Ikke-autoritativ. Verten ikke funnet.
NO_RECOVERING 3 Ikke gjenvinnbar feil.
INGEN DATA 4 Gyldig navn, ingen dataregistrering av forespurt type.

Den enkleste måten å identifisere en feil er å åpne et betinget bryterhopp innenfor "hvis" -tilstanden som vi så tidligere. Hopptilstanden er H_ERRNO -variabelen. Hvert tilfelle er definisjonen av hver av feilene som vi nettopp beskrev.

La oss nå se på koden til det første eksemplet der vi setter inn denne metoden for å oppdage og identifisere feilene i trinn 3.

//Trinn 1
#inkludere
#inkludere
#inkludere
#inkludere
#inkludere
#inkludere
tomrom ()
tomrom ()
//Steg 2

Structhostent *vert;
char buffer [255] = "www.000000000.com ";
// Trinn 3
if ((host = gethostByName (buffer)) == null)
switch (h_errno)
CASE HOST_NOT_FOUND:
printf ("Vert ikke funnet. Feil %i \ n ", h_errno);
gå i stykker;
sak Try_again:
printf ("ikke-autoritativ. Verten ikke funnet. Feil %i \ n ", h_errno);
gå i stykker;
sak no_data:
printf ("Gyldig navn, ingen dataregistrering av forespurt type. Feil %i \ n ", h_errno);
gå i stykker;
sak no_recovery:
printf ("Ikke -gjenvinnbar feil. Feil %i \ n ", h_errno);
gå i stykker;


Ellers
// Trinn 4
printf ("\ nip adresse til %s er:", host-> h_name);
printf ("%s \ n \ n", inet_ntoa (*(structin_addr*) host-> h_addr));

Som du kan se, spesifiserer vi et ikke-eksisterende domene i bufferen som fungerer som inngangsargumentet til GethostByName () -funksjonen i dette tilfellet. Dette resulterer i en feil som er identifisert i den betingede hoppbryteren.

Følgende bilde viser sammenstilling og utførelse av denne koden. I dette tilfellet kunne ikke GethostByName () -funksjonen finne verten. Så programmet hopper til

Vert _not_ funnet tilfelle av brytertilstanden:

Konklusjon

I denne Linux -hint -artikkelen viste vi deg hvordan du bruker GethostByName () -funksjonen for å få informasjon om et vertsnavn. Vi lærte den teoretiske beskrivelsen av hvordan den fungerer og hvordan inngangs- og utgangsargumentene er sammensatt, inkludert en spesiell seksjon som beskriver hvordan en "hostent" struktur er sammensatt.

Vi implementerte deretter bruken av denne funksjonen i praktiske eksempler. På den måten brukte vi kodebitene for å vise de nødvendige overskriftene for bruk, erklæringen om strukturer og variabler for deres argumenter, og konvertering og visning av innhentet informasjon.

I tillegg inkluderte vi en seksjon som forklarer de mulige feilene som denne funksjonen kan generere og lærte teknikkene for å oppdage og identifisere dem.

Som vi har sett i denne artikkelen, betyr enkelheten i denne funksjonen og dens raske implementering at den fremdeles er nyttig, selv om den ble ansett som foreldet.