Hola conseguir hacer lo con este codigo:
memset(&configs,0,sizeof(configs));
configs.ai_protocol = IPPROTO_TCP;
configs.ai_socktype = SOCK_STREAM;
configs.ai_family = AF_INET;
configs.ai_flags = AI_PASSIVE;
iResult = getaddrinfo("www.pruebasdephp.hol.es","80",&configs,&result);
if(iResult != 0){
string msg = "Can't resolve google";
msg += itoa(iResult);
MessageBox(NULL,msg.c_str(),"Error",MB_ICONERROR);
}else
MessageBox(NULL,inet_ntoa((in_addr &)(result->ai_addr)),"Address",MB_ICONEXCLAMATION);
Usando getaddrinfo() pero aqui se necesita dar el protocolo, flags ...
params param;
hostent * host;
strcpy_s(param.web,80,"http://www.pruebasdephp.hol.es");
param.port = 80;
//now get the ip
cout << param.web;
host = gethostbyname(param.web);
in_addr addr;
memcpy_s(&addr,sizeof(in_addr),host->h_addr_list[0],host->h_length); // Infraccion de acceso
Aqui al utilizar gethostbyname() me tira un error de infraccion de acceso al copiar la memoria. Poruqe pasa esto?
Saludos
No intente ponerlos en un programa y compilar ... pero a getaddrinfo no le pasas http y a gethostbyname si, ademas deberias SIEMPRE comprobar el valor de retorno, gethostbyname puede devolver NULL en caso de error.
Pues si efectivamente era esto. El http pero porque?
Retornaba NULL pero como lo hice rapido para probar una cosa deje sin escribir un if pensando que funciona bien y que el error esta en memcpy. 1 hora por no poner un if.
Vale gracias resuelto pero porque es tan importante el http?
No es importante, sobra, no es parte del host; es un protocolo, podrias poner ftp:// tambien, no tiene sentido cuando se esta resolviendo un host.
Gracias aqui pongo el codigo que funciona:
int _tmain(int argc, _TCHAR* argv[])
{ struct params{
char web[80];
int port;
in_addr ip;
};
WSADATA wsadata;
WSAStartup(MAKEWORD(2,2),&wsadata);
params param;
hostent * host;
strcpy_s(param.web,80,"www.pruebasdephp.hol.es");
param.port = 80;
//now get the ip
cout << param.web;
host = gethostbyname(param.web);
if(host == NULL)
cout << "error: " << host;
param.ip = *(struct in_addr *)host->h_addr;
cout << inet_ntoa(param.ip);
getchar();
return 0;
}
Ese codigo sigue siendo incorrecto, mostras en pantalla que fallo gethostbyname pero la ejecucion del programa continua, no podes desreferenciar host si es NULL (cosa que haces en la linea 21).
Bueno ya solo era una prueba ;D imprimo el error un getchar y return. Asi mejor ? O se puede anadir algo mas? Un log de errores ?