0

我有一个应用程序,它使用 getaddrinfo() 将 Windows 工作组中 PC 的主机名转换为 LAN 上该 PC 的 IPV4 地址。(注意,我不是指获取运行代码的 PC 的地址,我是指 LAN 上另一台 PC 的地址!)这已经在现场和实验室中工作了很长一段时间,但是现在我有一台运行异常的 Windows 7(32 位)PC。这台 PC 的主机名是“elbow”。

我在http://msdn.microsoft.com/en-us/library/windows/desktop/ms738520%28v=vs.85%29.aspx编译了 Microsoft 为 getaddrinfo() 提供的示例代码

当我在 LAN 上的任何 PC 上运行此示例代码并将“elbow”指定为主机名时,getaddrinfo() 返回环回地址 127.0.0.1 而不是正确的地址 (192.168.1.110)。但是,如果我指定任何其他主机名 getaddrinfo() 将返回正确的地址!

在过去的某个时间点,“肘部”没有表现出这种行为,因此很明显,那台 PC 的某些东西已经改变导致这种行为。我已尝试将 PC 磁盘映像恢复到我认为不会导致此行为的程度,但这并没有改变。PC 是有线连接还是无线连接到 LAN 也没有区别。为 LAN 上的所有 PC 启用 DHCP。即使所有 PC、路由器和交换机完全断电,这种行为也会持续存在。

4

2 回答 2

1

遇到类似的问题并想发布以防万一其他人发现此线程。

同样的事情发生在我们这边,客户安装的电脑。我们发现客户更改了他们的主机文件以将 127.0.0.1 与电脑的名称相关联...使用 getaddrinfo 查找某个子网的单独程序一直失败...他们最终临时重命名计算机以使用此功能,但他们也可以修复他们的主机文件。

该 Win 7 计算机上的主机文件位于 /windows/system32/drivers/etc 中。

于 2012-07-19T17:50:59.290 回答
0

我想用答案更新这个。房间里的大象是 ISP 的 DNS。我误以为我的子网与 ISP DNS 隔离,但事实并非如此。无论出于何种原因,他们的 DNS 为主机名“elbow”返回 127.0.0.1,但一旦我将其重命名为其他名称,我的问题就解决了!我还发现了另一台有同样问题的电脑,并且重命名它也修复了它。两台 PC 的共同点是都经历了操作系统重新加载,但直到这些操作系统重新加载后的一段时间,问题才变得明显。

于 2012-04-24T19:16:00.673 回答