Я хочу соединить клиента и сервер через Интернет (используя C++ и winsock2), поэтому я зарегистрировал доменное имя для сервера на No-IP, чтобы клиент мог определить его IP-адрес без необходимости быть на одном и том же LAN. Но когда клиент использует getaddrinfo () для определения IP-адреса сервера по доменному имени, getaddrinfo () всегда возвращает 8.23.224.90 (который не является IP-адресом сервера). Статистика Ping также показывает, что IP-адрес доменного имени 8.23.224.90. После того, как я долго гуглял проблему, я обнаружил это на веб-сайте No-IP:
«IP-адреса 8.23.224.90 и 50.19.220.154 являются прямыми адресами для наших серверов веб-перенаправления. Если вы настроили имя хоста в качестве веб-перенаправления, перенаправления порта 80 или включили автономную страницу, это IP-адреса, которые будут назначены вашему хосту ».
В настоящее время именно так клиент получает IP-адрес от имени домена "имя хоста". Что я должен добавить / изменить, чтобы получить реальный IP-адрес? Заранее спасибо...
int hostname_to_ip(char *hostname, char *ip) {
struct addrinfo hints, *servinfo, *p;
struct sockaddr_in *h;
memset(&hints,0,sizeof(hints));
hints.ai_family=AF_INET;
hints.ai_socktype=SOCK_STREAM;
getaddrinfo(hostname,NULL,&hints,&servinfo);
for (p=servinfo; p!=NULL; p=p->ai_next) {
h=(struct sockaddr_in*)p->ai_addr;
strcpy(ip,inet_ntoa(h->sin_addr));
}
}