'inet_addr':改用 inet_pton() 或 InetPton() 或定义 _WINSOCK_DEPRECATED_NO_WARNINGS

'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS

我正在使用 Visual Studio 2015 并尝试编译在我从 VS 2013 更新之前有效的代码。

'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS

在此代码中:

partner.sin_addr.s_addr = inet_addr(ip.c_str());

我尝试使用提到的函数,但它们未定义。我试图在许多不同的地方定义宏,但没有任何反应。另一个线程说我应该包括 Ws2tcpip.h 而不是 WinSock2 并添加 Ws2_32.lib。我已经添加了库,当我使用 include 时没有任何反应。这是怎么回事?!

ip字符串可以转换为in_addr structure with the InetPton函数。 它是这样使用的:

InetPton(AF_INET, strIP, &ipv4addr)

您需要包含 "Ws2tcpip.h" 头文件,使用库 "Ws2_32.lib" 和 DLL "Ws2_32.dll"。

确保在所有包含之前定义 _WINSOCK_DEPRECATED_NO_WARNINGS。

你可以试试

#pragma warning(disable:4996) 

用于使用 inet_addr().

只是为了让转换更清楚。假设您有代码使用已弃用的 inet_addr,如本例所示:

RecvAddr.sin_addr.s_addr = inet_addr("192.168.1.1");

它可以转换为较新的InetPton,如下所示:

InetPton(AF_INET, _T("192.168.1.1"), &RecvAddr.sin_addr.s_addr);

_T 宏可防止“const char 与 PCWSTR 不兼容”错误。