在很多应用场合,为了更人性化,用户输入的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 编程在线原创,转载请注明出处,谢谢。




