時(shí)間:2023-02-22 06:12:01 | 來(lái)源:建站知識(shí)
時(shí)間:2023-02-22 06:12:01 來(lái)源:建站知識(shí)
【編程黑科技】gethostbyname()函數(shù):通過(guò)域名獲取IP地址!:客戶端中直接使用 IP 地址會(huì)有很大的弊端,一旦 IP 地址變化(IP 地址會(huì)經(jīng)常變動(dòng)),客戶端軟件就會(huì)出現(xiàn)錯(cuò)誤。struct hostent*gethostbyname(constchar*hostname);hostname 為主機(jī)名,也就是域名。使用該函數(shù)時(shí),只要傳遞域名字符串,就會(huì)返回域名對(duì)應(yīng)的 IP 地址。
struct hostent{ char *h_name; //official name char **h_aliases; //alias list int h_addrtype; //host address type int h_length; //address lenght char **h_addr_list; //address list}
從該結(jié)構(gòu)體可以看出,不只返回 IP 地址,還會(huì)附帶其他信息,各位讀者只需關(guān)注最后一個(gè)成員 h_addr_list。下面是對(duì)各成員的說(shuō)明:#include <stdio.h>#include <stdlib.h>#include <WinSock2.h>#pragma comment(lib, "ws2_32.lib")int main(){ WSADATA wsaData; WSAStartup( MAKEWORD(2, 2), &wsaData); struct hostent *host = gethostbyname("www.baidu.com"); if(!host){ puts("Get IP address error!"); system("pause"); exit(0); } //別名 for(int i=0; host->h_aliases[i]; i++){ printf("Aliases %d: %s/n", i+1, host->h_aliases[i]); } //地址類型 printf("Address type: %s/n", (host->h_addrtype==AF_INET) ? "AF_INET": "AF_INET6"); //IP地址 for(int i=0; host->h_addr_list[i]; i++){ printf("IP addr %d: %s/n", i+1, inet_ntoa( *(struct in_addr*)host->h_addr_list[i] ) ); } system("pause"); return 0;}
運(yùn)行結(jié)果:Aliases 1: http://www.baidu.com
Address type: AF_INET
IP addr 1: 61.135.169.121
IP addr 2: 61.135.169.125
關(guān)鍵詞:獲取,地址,通過(guò),函數(shù),科技
客戶&案例
營(yíng)銷資訊
關(guān)于我們
客戶&案例
營(yíng)銷資訊
關(guān)于我們
微信公眾號(hào)
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。