getaddrinfo返回以前的固定IP地址 上下文:< /强>我的C++应用程序需要知道它运行的计算机是为了执行特定的行为。因此,我的应用程序获取计算机的IP地址,然后使用IP列表在配置文件中检查该地址,以确定计算机的角色。所有计算机都有固定的IP地址。我使用gethostname、getaddrinfo和inet_ntop来实现这一点
问题:在某些目标平台的计算机上,getaddrinfo返回旧的IP地址(设置固定值之前的地址)。但如果我在cmd中执行“ipconfig”,则会显示预期的固定值。它也可以被其他计算机ping。所有计算机只有一个网卡,IPv6已禁用 平台:Windows 7 x64 IDE:Visual Studio 2015 我想知道实际的固定IP地址。 谢谢你的帮助 代码示例:getaddrinfo返回以前的固定IP地址 上下文:< /强>我的C++应用程序需要知道它运行的计算机是为了执行特定的行为。因此,我的应用程序获取计算机的IP地址,然后使用IP列表在配置文件中检查该地址,以确定计算机的角色。所有计算机都有固定的IP地址。我使用gethostname、getaddrinfo和inet_ntop来实现这一点,c++,networking,ip-address,getaddrinfo,C++,Networking,Ip Address,Getaddrinfo,问题:在某些目标平台的计算机上,getaddrinfo返回旧的IP地址(设置固定值之前的地址)。但如果我在cmd中执行“ipconfig”,则会显示预期的固定值。它也可以被其他计算机ping。所有计算机只有一个网卡,IPv6已禁用 平台:Windows 7 x64 IDE:Visual Studio 2015 我想知道实际的固定IP地址。 谢谢你的帮助 代码示例: // [Some stuff...] addrinfo hints; addrinfo *pResults; int return
// [Some stuff...]
addrinfo hints;
addrinfo *pResults;
int returnedCode;
char hostName[1024];
if (0 != (returnedCode = gethostname(hostName, sizeof hostName)))
{
// Error handling stuff.
}
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_INET; // Only want IPv4.
hints.ai_socktype = SOCK_DGRAM; // UDP stream sockets.
hints.ai_flags = AI_PASSIVE; // Fill in my IP for me.
if (0 != (returnedCode = getaddrinfo(hostName, NULL, &hints, &pResults)))
{
// Error handling.
}
struct addrinfo* res;
char buffer[INET_ADDRSTRLEN];
std::string localIP;
for (res = pResults; res != NULL; res = res->ai_next)
{
if (res->ai_family == AF_INET)
{
const char* ip = inet_ntop(AF_INET,
&((struct sockaddr_in *)res->ai_addr)->sin_addr, buffer, INET_ADDRSTRLEN);
if ((NULL == ip) || (nullptr == ip))
{
// Error handling.
}
else
{
localIP = std::string(ip);
}
}
}
freeaddrinfo(pResults); // free the linked-list
WSACleanup();
// [More stuff...]
可能名称/地址在本地缓存,并且在超时时间内。。。您可以执行“ipconfig/displaydns”来检查它,或者执行“ipconfig/flushdns”(可能需要提升)来清除缓存可能名称/地址在本地缓存并且在超时时间内。。。您可以执行“ipconfig/displaydns”来检查它,或者执行“ipconfig/flushdns”(可能需要提升)来清除缓存