我正在编写一个基本的 UDP 客户端-服务器程序,但没有从 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])));
所以,第一个 print 语句输出了我所期望的,即我的计算机的名称。但是,我希望第二个打印语句打印出我的 IP 地址。但是不,它打印出这样的东西:4398250634。它打印出来的是什么?我如何获得我的 IP 地址?
最佳答案
首先,您不应该使用gethostbyname
接口(interface)。它已被弃用,无法处理 IPv6,IPv6 是 2012 年现实世界中一个实用的展示停止器。要使用的正确接口(interface)是 getaddrinfo
。使用 getaddrinfo
查找主机名并将其以套接字地址形式显示后,您可以使用带有 NI_NUMERICHOST
标志的 getnameinfo
来转换将其转换为可打印的 IP 地址表格。这适用于 IPv4 或 IPv6,或任何 future 的协议(protocol)。
至于您的特定打印问题,您希望 %ld
如何打印 IP 地址?它以十进制(基数 10)打印单个数字 (long
)。您可以改为将指针转换为 unsigned char *
并读取 4 个元素,每个元素都用 %d
打印,但这同样是一个糟糕的方法。
关于c++ - getbyhostname() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9138383/