gethostname方法,gethostbyname头文件
Gethostbyname用法-leesphone的专栏-博客频道-CSDN。网
Gethostbyname用法
分类:
传输控制协议
软件工程师
2008-03-02 10:26
4050人阅读
评论(21)
收集
要报告此事,您必须首先包含2个头文件:
#包含netdb.h
#包含sys/socket.h
struct hostent * gethostbyname(const char * name);
这个函数传入的值是域名或者主机名,比如 www.google.com , wpc 等等。
传出值,它是hostent的一个结构(如下)。如果函数调用失败,将返回NULL。
结构主机{
char * h _ name
char * * h _ aliases
int h _ addrtype
int h _长度;
char * * h _ addr _ list
};
解释这种结构,其中:
Char *h_name表示主机的规范名称。例如,www.google.com的规范名称实际上是www.l.google.com。
Char **h_aliases表示主机的别名。是www.google.com,他自己的化名。有时,一些主机可能有几个别名。这些实际上是他们网站更多的名字,为了让用户容易记住。
Int h_addrtype表示主机ip地址的类型,是ipv4(AF_INET)还是ipv6(AF_INET6)
Int h_length表示主机ip地址的长度。
Int **h_addr_lisst表示主机的ip地址。请注意,这是按照网络字节顺序存储的。千万不要用printf带%s参数直接打这个东西,会有问题。所以要真正打印出这个IP,需要调用inet_ntop()。
const char *inet_ntop(int af,const void *src,char *dst,socklen_t cnt):
这个函数将af类型的网络地址结构src转换成一个主机序列字符串,并将其存储在一个长度为cnt的字符串中。
这个函数实际上返回一个指向dst的指针。如果函数调用错误,返回值为NULL。
以下是套路,有详细评论。
#包含netdb.h
#包含sys/socket.h
int main(int argc,char **argv)
{
char *ptr,* * pptr
struct hostent * hptr
char string[32];
/*获取命令后的第一个参数,即要解析的域名或主机名*/
ptr=argv[1];
/*调用gethostbyname()。调用结果都存储在hptr */中
if((hptr=gethostbyname(ptr))==NULL)
{
printf(主机的gethostbyname错误:%s/n ,ptr);
返回0;/*如果调用gethostbyname时出错,则返回1 */
}
/*键入主机的规范名称*/
printf(官方主机名:%s/n ,hptr-h _ name);
/*主机可能有多个别名,请分别键入它们*/
for(pptr=hptr-h _ aliases;*pptr!=NULLpptr)
printf(别名:%s/n ,* pptr);
/*根据地址类型键入地址*/
开关(hptr- h_addrtype)
{
案例AF_INET:
案例AF_INET6:
pptr=hptr-h _ addr _ list;
/*把你刚得到的所有地址都打出来。其中inet_ntop()函数*/
for(;*pptr!=NULLpptr)
printf(地址:%s/n ,inet_ntop(hptr- h_addrtype,*pptr,str,sizeof(str)));
打破;
默认值:
printf(未知地址类型/n );
打破;
}
返回0;
}