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

新手上路,请多包涵

我正在使用 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。我已经添加了库,当我使用包含时什么也没发生。到底是怎么回事?!

原文由 The Count 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

可以使用 InetPton 函数将 ip 字符串转换为 in_addr 结构。它是这样使用的:

 InetPton(AF_INET, strIP, &ipv4addr)

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

原文由 Florian Haupt 发布,翻译遵循 CC BY-SA 3.0 许可协议

只是为了使转换清晰。假设您有使用已弃用的 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 incompatible with PCWSTR ”错误。

原文由 Nagev 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题