Red de conocimiento informático - Material del sitio web - Conversión de nombre de dominio IP Ayuda con corrección de errores relacionados con el uso específico de la función gethostbyname

Conversión de nombre de dominio IP Ayuda con corrección de errores relacionados con el uso específico de la función gethostbyname

No estoy seguro si estás usando Windows o vc++.

Winsocket debe inicializarse antes de que pueda funcionar. Lo cambié por ti. Los archivos de encabezado del compilador de VC++ son diferentes a los suyos.

Programa .cpp:

#include

#include // vc++

int main(){

int i;

//Inicialización

WSADATA wsa

WORD wVersionRequested

wVersionRequested = MAKEWORD( 2, 0 );

if (WSAStartup(wVersionRequested , &wsa)!= 0)

{ printf("Error en la inicialización de Winsock.\n"); (0);

};

//copia, sin cambios

struct hostent *he=gethostbyname("www.sina.com.cn" );

if(he!=NULL){

printf("h_name:%s\n",he->h_name);

printf( "h_length:%d\n",he->h_length);

printf("h_addrtype:%d",he->h_addrtype);

for(i=0; he->h_aliases[i] ! =NULL;i++)

printf("h_aliases%d:%s\n",i+1,he->h_aliases[i]);

for(i=0;he->h_addr_list[i] !=NULL;i++){

struct in_addr *addr;

addr=(struct in_addr *)él ->h_addr_list[i];

printf("ip%d:%s\n",(i+1),inet_ntoa(* addr));

}

}

else

//printf("gethostbyname error: %s\n",hstrerror(h_errno)); //vc++ no tiene esta función

printf(" error gethostbyname:\n");

return 0;

}

-------- -- --

Funciona correctamente.

llamada vc++

id = WSAGetLastError();

cambiar (id)

{

caso WSANOTINITIALISED : printf("no inicializado\n"); break;

caso WSASYSNOTREADY: printf("sub sys no está listo\n");

caso WSAHOST_NOT_FOUND: printf(" servidor de nombres no encontrado\n"); break;

case WSATRY_AGAIN: printf("fallo del servidor\n"); break;

case WSANO_RECOVERY: printf("no hay recuperación\n "); break;

case WSAEINPROGRESS.printf("socket bloqueado por otro programa\n"); break;

case WSANO_DATA: printf("sin registro de datos\n") ; break;

case WSAEINTR: printf("llamada de bloqueo cancelada\n"); break;

// case WSAVERNOTSUPPORTED: printf("no es compatible\n");

case WSAEPROCLIM: printf("límite excedido\n");

case WSAEFAULT: printf("lpWSAData en inicio no válido\n");

predeterminado: printf("id de error desconocido = %d\n",id);break;

};

Debo buscar el mensaje de error.