getbyhostname()如何工作?

Gro*_*ppe 0 c c++ sockets ip

我正在编写一个基本的UDP Client-Server程序,但没有从getbyhostname()获得预期的结果.以下是我的代码中的代码段:

char *clientHostName = malloc(HOST_NAME_MAX);
gethostname(clientHostName, HOST_NAME_MAX);
printf("%s\n",clientHostName);
struct hostent thehost = gethostbyname(clientHostName);
printf("%ld\n",(*((unsigned long *) thehost->h_addr_list[0])));
Run Code Online (Sandbox Code Playgroud)

因此,第一个print语句输出我所期望的,我的计算机的名称.但是,我希望第二个print语句打印出我的IP地址.但不,它打印出这样的东西:4398250634.这是什么打印出来的?我如何获得我的IP地址?

R..*_*R.. 7

首先,您不应该使用该gethostbyname界面.它已被弃用,无法处理IPv6,这是一个真实的,实用的显示阻止在2012年.正确的使用界面是getaddrinfo.一旦您习惯getaddrinfo查找主机名并以套接字地址形式使用它,您就可以使用getnameinfoNI_NUMERICHOST标志将其转换为可打印的IP地址表单.这适用于IPv4或IPv6,或适用于任何未来的协议.

至于您的特定打印问题,您希望%ld如何打印IP地址?它long以十进制(基数10)打印单个数字().您可以将指针转换unsigned char *为4个元素,每个元素都要打印%d,但这又是一个糟糕的方法.