hint.ai_protocol = 0;
/* if set to 0, 3 addrinfos will be returned */
hint.ai_socktype = SOCK_STREAM;
/* must be set to 0 or NULL */
hint.ai_addrlen = 0;
hint.ai_addr = NULL;
hint.ai_canonname = NULL;
hint.ai_next = NULL;
error = getaddrinfo(argv[1], NULL, &hint, &result);
if (error != 0) {
fprintf(stderr, "error in getaddrinfo: %s\n", gai_strerror(error));
return 1;
/* loop over all returned results and do inverse lookup */
for (res = result; res != NULL; res = res->ai_next) {
char hostname[NI_MAXHOST] = "";
error = getnameinfo(res->ai_addr, res->ai_addrlen, hostname, NI_MAXHOST, NULL, 0, 0);
if (error != 0) {
fprintf(stderr, "error in getnameinfo: %s\n", gai_strerror(error));
continue;
if (*hostname) {
printf("hostname: %s\n", hostname);
freeaddrinfo(result);
return 0;
使用gethostbyname函数, 报错如下:
Use
get
add
r
info
() or Get
Add
r
Info
W() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings XXX
打开项目属性,编辑预处理器定义,增加_WINSOCK_DEPRECATED_NO_...
当我们使用vs进行网络编程时出现
error C4996: ‘gethostbyname’:
Use
get
add
r
info
() or Get
Add
r
Info
W() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
1>d:\windows kits\10\include\...
错误提示用get
add
r
info
() or Get
Add
r
Info
W()函数代替gethostbyname函数,用inet_ntop() or InetNtop()代替inet_ntoa,若不用
上述函数代替原有函数的解决方法为“打开“项目”-->“属性”-->“配置属性”-->"C/C++"-->"预处理器"-->...
#define _GNU_SOURCE /* To get defns of NI_MAXSERV and NI_MAXHOST */
#include <arpa/inet.h>
#include <sys/
socket
.h>
#include <netdb.h>
#include <if
add
rs.h>
#include <...
主要是如何使用两个函数的返回结构。在gethostbyname函数中,返回hostent,linux参考手册介绍如下:struct hostent {
char *h_name; /* official name of host */
char **h_aliases; /* alias list */
int h_
add
rtyp
sock
add
r_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_
add
r.s_
add
r = inet_
add
r("10.224.5.27");
clientService.sin_port = htons(7008);
1. 网络环境中服务器需要一个唯一的IP地址和一个主机名(域名),大多数情况,我们知道域名,而不会去记住IP,
基于此需要进行域名到IP的转换
2.get
add
r
info
函数,将一个主机名和一个服务器名映射到一个地址.注意这两个名字必须再DNS服务器中注册过,
第三个参数是一个地址过滤模板,通常情况下不过滤,NULL,第4个参数为可用的通信地址信息结构列表.
#include <sys/
其中参数name是一个指向用于存储主机名的缓冲区的指针,len是该缓冲区的大小。如果函数调用成功,它将主机名存储在缓冲区中,并返回0;如果失败,则返回-1,并设置errno变量。
get
add
r
info
函数是获取一个主机名或服务名对应的IP地址和端口号的函数,它的原型如下:
int get
add
r
info
(const char *node, const char *service, const struct
add
r
info
*hints, struct
add
r
info
**res);
其中node参数是主机名或IP地址,service参数是服务名或端口号,hints参数是一个
add
r
info
结构体指针,用于指定一些选项和限制条件,res参数是一个指向
add
r
info
结构体链表的指针,用于存储获取到的结果。
如果函数调用成功,它将返回0,并将获取到的结果存储在res指针所指向的链表中;如果失败,则返回一个非零错误码,并设置errno变量。在使用完结果后,应该调用free
add
r
info
函数释放所分配的内存。