【Linux C | 网络编程】gethostbyname 函数详解及C语言例子
gethostbyname
函数用于将主机名转换为IP地址。它在网络编程中非常常见,特别是在编写基于TCP/IP的客户端和服务器程序时。
函数原型如下:
struct hostent *gethostbyname(const char *hostname);
返回值:成功返回指向 hostent
结构的指针,该结构包含了所请求主机的信息。失败返回 NULL
,并设置 h_errno
全局变量为下列值之一:HOST_NOT_FOUND
, TRY_AGAIN
, NO_RECOVERY
, NO_DATA
。
下面是一个简单的使用 gethostbyname
函数的C语言示例:
#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <sys/socket.h>
int main(int argc, char *argv[]) {
char *hostname;
struct hostent *h;
struct in_addr **addr_list;
int i;
if (argc != 2) {
fprintf(stderr, "Usage: %s <hostname>\n", argv[0]);
exit(1);
}
hostname = argv[1];
h = gethostbyname(hostname);
if (h == NULL) {
herror("gethostbyname");
exit(1);
}
addr_list = (struct in_addr **)h->h_addr_list;
for (i = 0; addr_list[i] != NULL; i++) {
printf("Address %d: %s\n", i, inet_ntoa(*addr_list[i]));
}
return 0;
}
这段代码接受一个主机名作为命令行参数,然后调用 gethostbyname
来解析这个主机名。如果解析成功,它会打印出所有的IPv4地址。注意,这个例子中使用了IPv4地址,因此主机必须至少有一个IPv4地址。如果你需要处理IPv6地址,你应该使用 h->h_addrtype
而不是硬编码使用 AF_INET
。
评论已关闭