【问题1】
ws2def.h(91): warning C4005: “AF_IPX”: 宏重定义; winsock2.h(460) : 参见“AF_IPX”的前一个定义
【原因】
windows.h头文件中已经包含有winsock.h,winsock.h和winsock2.h定义了一样的宏。
【解决方案】
方案一:定义宏 WIN32_LEAN_AND_MEAN
属性 > 配置属性 > c/c++ > 预处理器 > 预处理器定义:添加 WIN32_LEAN_AND_MEAN
如果该宏定义存在,windows.h就不会包含winsock.h。
方案二:将winsock2.h文件写在windows.h之前。
#include "winsock2.h"
#include "windows.h"
【问题2】
C4996: 'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS
错误:C4996: 'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
在vs2017 下socket编程时会出现如题的错误,错误的原因在于从VS2013版本以上开始支持新的函数,使用旧的函数会报错。
这里推荐使用新的函数替换老的函数。
解决方法:
1.可以修改VS配置,使其支持老的函数
把SDL检查关闭
2.使用推荐的新函数
这种方式值得推荐,紧跟时代潮流么
在使用新函数时需要添加
#include <Ws2tcpip.h>头文件
新函数的使用方法如下:
//vs2013版本以上使用新的函数转换IP地址
inet_pton(AF_INET, "127.0.0.1", &sockAddr.sin_addr.s_addr);
//InetPton(AF_INET, "127.0.0.1", &sockAddr.sin_addr.s_addr);
//sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
本文介绍了在Visual Studio 2017中遇到的两个常见问题及其解决方案。问题一是关于`AF_IPX`宏重定义的警告,解决方案包括定义`WIN32_LEAN_AND_MEAN`宏或者调整包含头文件的顺序。问题二是`inet_addr`函数的弃用警告,推荐使用`inet_pton`或`InetPton`替代。解决方法包括关闭SDL检查或直接使用新函数。
2054

被折叠的 条评论
为什么被折叠?



