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

时间:2016-04-18 00:37:12

标签: c++ winsock

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

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

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

我试图使用上面提到的功能,但它们未定义。我试图在很多不同的地方定义宏,但没有发生任何事情。另一个线程说我应该包括Ws2tcpip.h而不是WinSock2&添加Ws2_32.lib。我已经添加了库,当我使用include时没有发生任何事情。发生了什么事?!

4 个答案:

答案 0 :(得分:15)

可以使用in_addr函数将ip字符串转换为InetPton结构。 它的使用方式如下:

InetPton(AF_INET, strIP, &ipv4addr)

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

答案 1 :(得分:9)

只是为了明确转换。我们假设您使用已弃用的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不兼容"错误。

答案 2 :(得分:5)

你可以尝试

#pragma warning(disable:4996) 

使用inet_addr()

答案 3 :(得分:2)

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