我正在使用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时没有发生任何事情。发生了什么事?!
答案 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。