在很多应用场合,为了更人性化,用户输入的IP地址与域名应该是等价的,也就是说,如果用户输入的是IP地址则直接调用IP,如果用户输入的是域名,底层能够将域名自动转换为其指向的IP地址之后再调用该IP地址。比如我们经常使用的ping命令,”ping 14.1.20.43″与”ping www.cpplive.com”达到的效果是一样的,都能检测域名“www.cpplive.com”所指向的服务器是否在线。在此提供两个C语言函数,一个函数判断指定字符串是否为IP地址,另一个函数根据指定域名获取对应的IP地址。
函数一:判断指定字符串是否为IP地址
int isIPAddr(const char* pStr) { int bRet = 1; if (NULL == pStr) return -1; const char* p = pStr; for (; *p != '\0'; p++) { if ((isalpha(*p)) && (*p != '.')) { bRet = 0; break; } } return bRet; }
如果指定字符串pStr为IP地址则返回1,否则返回0
函数二:根据指定域名获取对应的IP地址
int getIPbyDomain(const char* domain, char* ip) { struct hostent *answer; answer = gethostbyname(domain); if (NULL == answer) { herror("gethostbyname");//the error function of itself return -1; } if (answer->h_addr_list[0]) inet_ntop(AF_INET, (answer->h_addr_list)[0], ip, 16); else return -1; return 0; }
由于该函数调用了系统函数gethostbyname,所以务必加上头文件“netdb.h”和“sys/socket.h”,如果domain对应的IP地址存在,则将IP地址存入ip指针所指向的内存地址中并返回0,否则返回-1。
除非注明,文章均为CppLive 编程在线原创,转载请注明出处,谢谢。