Conversión de nombre de dominio IP Ayuda con corrección de errores relacionados con el uso específico de la función gethostbyname
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
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));
} p>
}
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.