Las funciones de resolución de nombres de dominio gethostbyname y getaddrinfo

  
under linux  

a #include prototipo de la función < netdb.h > struct hostent * gethostbyname (const char * nombre); acción: la estructura prototipo puede ser utilizado para resolver nombres de dominio hostent sigue: struct hostent {char * h_name; char ** h_aliases; int h_addrtype; int h_length; char ** h_addr_list;} ejemplo: # include < stdio.h > # include < stdlib.h > # include < sys /socket.h > # include < netinet /in. h > # include < netdb.h > int main (int argc, char ** argv) {if (argc = 2!) {fprintf (stderr, " Uso:% s hostname \\ n ", argv [1]); de salida (1);} struct hostent * respuesta; int i; charla ipstr [16]; respuesta = gethostbyname (argv [1]), si (respuesta == NULL) {herror (" gethostbyname "); //una gethostbyname propia salida función de gestión de errores (1);} for (i = 0; (respuesta- > h_addr_list) [i] = NULL;! i ++) {inet_ntop (AF_INET, (respuesta- > h_addr_list) [i] , ipstr, 16); printf ("% s \\ n ", ipstr); printf (" nombre officail:% s \\ n ", respuesta- > h_name);} de salida (0);} implementación compilador de los resultados: root @ ubuntu: /media /2-G /profesor Código /20100427 /inet_v4 /arroyo # ./myhost www.hpu.edu.cn202.102.253.254officail nombre: www.hpu.edu.cn En segundo lugar, el prototipo de la función int getaddrinfo (const char * nodo, el servicio * const char, const struct addrinfo * consejos, estructura addrinfo ** Res); esta función almacena datos en una lista enlazada. char * nodo generalmente const char * Servicio //nombre de dominio, puede NULLconst estructura de puntos struct addrinfo * consejos //devuelto por la dirección de enchufe de los res struct addrinfo ejemplar ** res //resultados para ser devueltos: # include < stdio.h > # include < stdlib.h > # include < sys /socket.h > # include < netinet /in.h > # include < netdb.h > # include < string.h > int main (int argc, char ** argv) {if (argc = 2!) {fprintf (stderr, " Uso:% s hostname \\ n ", argv [1]); la salida (1);} struct addrinfo * respuesta, pista, * curr; charla ipstr [16]; bzero (&pista, sizeof (indirecta)); hint.ai_family = AF_INET; hint.ai_socktype = SOCK_STREAM; int ret = getaddrinfo (argv [1], NULL, &indicio , &respuesta), si (r = 0) {fprintf (stderr, " getaddrinfo: &s \\ n ", gai_strerror (retirado); salida (1);!)} de (curr = contestar; curr =! NULL; curr = curr- > ai_next) {inet_ntop (AF_INET, &(((struct sockaddr_in *) (curr- > ai_addr)) - > sin_addr), ipstr, 16); printf ("% s \\ n ", ipstr);} FreeAddrInfo (respuesta); salida (0);}
zh-CN"],null,[0.95918638],zh-CN"]]]

Copyright © Conocimiento de Windows All Rights Reserved