当前位置: 技术问答>linux和unix
linux网络编程中gethostbyname、gethostbyaddr函数的用法
来源: 互联网 发布时间:2017-02-20
本文导语: 最近在学习linux网络编程,阅读别人代码时遇到下面一个问题。 在TCP套接口编程中,客户端向服务器是通过hostname参数进行信息传递的。所以在源代码tcp_client.c中对输入的命令 ./tcp_client hostname是这样判断的: ...
最近在学习linux网络编程,阅读别人代码时遇到下面一个问题。
在TCP套接口编程中,客户端向服务器是通过hostname参数进行信息传递的。所以在源代码tcp_client.c中对输入的命令
./tcp_client hostname是这样判断的:
这里用到了gethostbyname这个函数。gethostbyname的参数为域名或者主机名。我使用命令hostname查的我的hostname为localhost.localdomain 。然后执行命令./tcp_client localhost.localdomain ,服务器端显示的结果是:Server get connection from 127.0.0.1 (但是我的IP值为192.168.1.100)。更不可思议的是,我可以使用命令./tcp_client 192.168.1.100 ,服务器的结果为:Server get connection from 192.168.1.100 。这就让我很不理解了,192.168.1.100是IP地址,它需要用gethostbyaddr()这个函数的啊。为什么这里执行命令./tcp_client 192.168.1.100会通过呢??
在TCP套接口编程中,客户端向服务器是通过hostname参数进行信息传递的。所以在源代码tcp_client.c中对输入的命令
./tcp_client hostname是这样判断的:
if((host=gethostbyname(argv[1]))==NULL)
{
fprintf(stderr,"Gethostname errorn");
exit(1);
}
这里用到了gethostbyname这个函数。gethostbyname的参数为域名或者主机名。我使用命令hostname查的我的hostname为localhost.localdomain 。然后执行命令./tcp_client localhost.localdomain ,服务器端显示的结果是:Server get connection from 127.0.0.1 (但是我的IP值为192.168.1.100)。更不可思议的是,我可以使用命令./tcp_client 192.168.1.100 ,服务器的结果为:Server get connection from 192.168.1.100 。这就让我很不理解了,192.168.1.100是IP地址,它需要用gethostbyaddr()这个函数的啊。为什么这里执行命令./tcp_client 192.168.1.100会通过呢??
|
...
gethostbyname接受IP/域名,首先查看本地/etc/hosts,如果存在直接获得,否则发起DNS查询获得IP。
你提供localhost,在/etc/hosts里就得到了是本地环回127.0.0.1。
你提供了一个IP地址192.168。1.100,gethostbyname只检查IP合法性,之后就直接返回它了,你连接这个IP就是连接自己。
gethostbyname接受IP/域名,首先查看本地/etc/hosts,如果存在直接获得,否则发起DNS查询获得IP。
你提供localhost,在/etc/hosts里就得到了是本地环回127.0.0.1。
你提供了一个IP地址192.168。1.100,gethostbyname只检查IP合法性,之后就直接返回它了,你连接这个IP就是连接自己。