我有一个应用程序,它使用getaddrinfo()从Windows工作组中的PC的主机名转换为LAN上该PC的IPV4地址。 (注意,我的意思并不是说运行代码的PC的地址,我的意思是局域网上另一台PC的地址!)这已经在现场和实验室工作了很长一段时间但是现在我的Windows 7(32位)PC表现异常。这台电脑的主机名是“肘部”。
我在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,路由器和交换机完全断电,行为仍然存在。
答案 0 :(得分:1)
遇到类似的问题并希望发布以防其他人找到此帖子。
我们这边发生了同样的事情,客户安装了计算机。我们发现客户更改了他们的hosts文件以将127.0.0.1与pc的名称相关联...使用getaddrinfo的单独程序找到某个子网仍然失败...他们最终暂时重命名计算机以使用此功能但他们也可以修复他们的主机文件。
Win 7计算机上的hosts文件位于/ windows / system32 / drivers / etc.
答案 1 :(得分:0)
我想用答案更新这个。房间里的大象是ISP的DNS。我的错误印象是我的子网与ISP DNS隔离但事实并非如此。无论出于何种原因,他们的DNS为主机名“elbow”返回127.0.0.1,但是一旦我将其重命名为其他东西,我的问题就变得糟透了!我还发现了另一台有相同问题的PC,并重命名它也修复了它。两台PC的共同之处在于两者都经历了操作系统重新加载,但问题在这些操作系统重新加载后的一段时间内才变得明显。