gethostbyname()函数的说明
2017-05-11 16:10
836 查看
最近在学习WebBench的源码,我对网络编程这一点是个小白,还带自己一点一点的学习。遇到不会的函数等就带在网上插,插这个函数的参数已经这个函数的功能。今天刚看就遇到了一个函数gethostbyname函数。通过上网插一些资料说说我对这个函数的理解,并做下笔记。
1、函数原型:struct hostent * gethostbyname(const char *hostname);
2、该函数所在的头文件为:<netdb.h> 和 <sys/socket.h>,也就是说如果想要使用这个函数必须在文件中包含这两个头文件。
3、函数的形参:函数的参数是一个const char*,是一个字符串指针。也就是我们想要访问的主机名,如"www.baidu.com"。
4、函数返回值:如果函数执行失败,返回NULL指针。
如果函数执行成功,函数的返回值是一个指向hostent结构体的指针。下面我们来说说hostent结构体。
4.1 hostent结构体
hostent结构体记录了与字符串hostname主机名对应的信息,hostent的原型如下
struct hostent
{
char *h_name; 主机名:如 www.baidu.com
char **h_aliases; 主机别名:如google
int h_addrtype; IP地址的类型:IPV4(AF_INET)和IPV6(AF_INET6)
int h_length; IP地址的长度
char **h_addr_list;
#define h_addr h_addr_list[0]; h_addr是指h_addr_list中的第一地址。就是主机名对应的IP地址
};
注意:这里千万不能用printf直接打印出h_addr,会出下错误。要使用函数inet_ntoa()打印出正确的IP。
printf("IP Address : %s\n",inet_ntoa(*((struct in_addr *)h->h_addr)));
//h是hostent类型的指针
下一篇博客中会对inet_ntoa函数进行介绍。
5、gethostbyname函数功能:将一个字符串主机名解析为一个hostent结构体。
6、linux,Ubuntu下测试代码
gethostbyname.cpp
#include<stdio.h>
#include<stdlib.h>
#include<netdb.h>
#include<sys/socket.h>
#include<arpa/inet.h>
int main(int argc, char *argv[])
{
if(argc != 2)
{
printf("the number of parameter is not enough!\n");
exit(1);
}
hostent *h = gethostbyname(argv[1]);
if(h == NULL)
{
printf("error in function gethostbyname!\n");
exit(1);
}
printf("主机名为:%s\n", h->h_name);
printf("主机地址类型为:%d\n", h->h_addrtype);
printf("主机地址长度为:%d\n", h->h_length);
printf("主机IP为:%s\n", inet_ntoa(*((in_addr*)h->h_addr)));
return 0;
}进入gethostbyname.cpp所在的文件,然后
g++ -o gethostbyname gethostbyname.cpp
./gethostbyname
7、运行结果如下:
1、函数原型:struct hostent * gethostbyname(const char *hostname);
2、该函数所在的头文件为:<netdb.h> 和 <sys/socket.h>,也就是说如果想要使用这个函数必须在文件中包含这两个头文件。
3、函数的形参:函数的参数是一个const char*,是一个字符串指针。也就是我们想要访问的主机名,如"www.baidu.com"。
4、函数返回值:如果函数执行失败,返回NULL指针。
如果函数执行成功,函数的返回值是一个指向hostent结构体的指针。下面我们来说说hostent结构体。
4.1 hostent结构体
hostent结构体记录了与字符串hostname主机名对应的信息,hostent的原型如下
struct hostent
{
char *h_name; 主机名:如 www.baidu.com
char **h_aliases; 主机别名:如google
int h_addrtype; IP地址的类型:IPV4(AF_INET)和IPV6(AF_INET6)
int h_length; IP地址的长度
char **h_addr_list;
#define h_addr h_addr_list[0]; h_addr是指h_addr_list中的第一地址。就是主机名对应的IP地址
};
注意:这里千万不能用printf直接打印出h_addr,会出下错误。要使用函数inet_ntoa()打印出正确的IP。
printf("IP Address : %s\n",inet_ntoa(*((struct in_addr *)h->h_addr)));
//h是hostent类型的指针
下一篇博客中会对inet_ntoa函数进行介绍。
5、gethostbyname函数功能:将一个字符串主机名解析为一个hostent结构体。
6、linux,Ubuntu下测试代码
gethostbyname.cpp
#include<stdio.h>
#include<stdlib.h>
#include<netdb.h>
#include<sys/socket.h>
#include<arpa/inet.h>
int main(int argc, char *argv[])
{
if(argc != 2)
{
printf("the number of parameter is not enough!\n");
exit(1);
}
hostent *h = gethostbyname(argv[1]);
if(h == NULL)
{
printf("error in function gethostbyname!\n");
exit(1);
}
printf("主机名为:%s\n", h->h_name);
printf("主机地址类型为:%d\n", h->h_addrtype);
printf("主机地址长度为:%d\n", h->h_length);
printf("主机IP为:%s\n", inet_ntoa(*((in_addr*)h->h_addr)));
return 0;
}进入gethostbyname.cpp所在的文件,然后
g++ -o gethostbyname gethostbyname.cpp
./gethostbyname
7、运行结果如下:
相关文章推荐
- gethostbyname()函数说明
- perl函数说明(gethostbyname )
- gethostbyname()函数说明
- gethostbyname()函数说明
- gethostbyname() 函数说明
- gethostbyname()函数说明
- linux之 获取主机IP gethostbyname()函数说明
- gethostbyname()函数说明
- gethostbyname()函数说明——用域名或主机名获取IP地址
- gethostbyname()函数说明
- gethostbyname()函数说明 ---用域名或主机名获取IP地址
- gethostbyname()和gethostbyaddr()函数说明
- gethostbyname() 函数说明
- gethostbyname()函数说明
- Math.Round函数说明
- Turbo C 2.0 函数中文说明大全
- sap里部分函数说明
- 主调函数对被调函数任类型说明(申明)的问题[转]
- header()函数使用说明
- Win2000共享内存 CreateFileMapping的函数参数说明