Chcę połączyć klienta z serwerem przez Internet (używając C ++ i winsock2), więc zarejestrowałem nazwę domeny dla serwera w trybie bez adresu IP, aby klient mógł ustalić, że jest to adres IP bez konieczności korzystania z tego samego adresu IP LAN. Ale gdy klient używa getaddrinfo () do ustalenia adresu IP serwera na podstawie nazwy domeny, getaddrinfo () zawsze zwraca 8.23.224.90 (który nie jest adresem IP serwera). Statystyki ping również pokazują, że adres IP nazwy domeny 8.23.224.90. Po długim przeglądaniu problemu w końcu znalazłem to na stronie internetowej bez adresu IP:
„Adresy IP 8.23.224.90 i 50.19.220.154 to bezpośrednie lokalizacje dla naszych serwerów przekierowań internetowych. Jeśli masz skonfigurowaną nazwę hosta jako przekierowanie sieciowe, przekierowanie portu 80 lub masz włączoną stronę offline, są to adresy IP, które zostaną przypisane do twojego hosta. ”
Obecnie w ten sposób klient uzyskuje adres IP z nazwy domeny „nazwa hosta”. Co powinienem dodać / zmienić, aby uzyskać prawdziwy adres IP? Z góry dziękuję...
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));
}
}
źródło