【发布时间】:2015-11-17 01:31:30
【问题描述】:
我是互联网编程新手,我正在尝试使用gethostbyname() 函数。当我在 gethostbyname 函数中输入诸如“www.yahoo.com”之类的字符串时,它可以正常工作,但是当我输入 char 数组时,它总是会返回一个空缓冲区。
char hostname[100];
struct hostent* h;
gethostname(hostname, sizeof hostname );
printf("Hostname: %s\n", hostname);
h = gethostbyname(hostname);
知道如何解决这个问题吗?
【问题讨论】:
-
gethostname()返回的主机名是否有效?您没有检查返回值是否有错误。无论如何,为gethostname()报告的主机名调用gethostbyname()毫无意义。这是检索本地计算机 IP 地址的常见错误方法。您应该使用GetAdaptersInfo/GetAdaptersAddresses(Windows)、getifaddrs()(*Nix) 或其他类似的特定于平台的函数来直接枚举本地接口。 -
是的,gethostname 返回正确的主机名,但 gethostbyname 总是返回 null。
-
您真正想要完成什么?
gethostbyname()执行 DNS 查找。使用gethostname()报告的主机名不能保证返回有效的 DNS 结果,具体取决于您机器的 DNS 设置。在某些平台上,使用本地主机名调用gethostbyname()将返回结果,而在某些平台上则不会。如果失败,请检查WSAGetLastError()/h_errno找出原因。无论如何,gethostbyname()无论如何都已弃用,您应该改用getaddrinfo()。 -
@RemyLebeau 我只是想找出我正在运行的机器的 IP 地址。无论如何,我想我会改为检查 getaddrinfo(),谢谢!
-
@SH.C 你机器的主机名是什么?
标签: c sockets gethostbyname