头文件Winsock2.h在内部包含了Windows.h的核心元素,因此在Winsock应用程序中通常不包含头文件Windows.h。如果需要一个#include行来包含Windows.h,那么就需要在前面包含#define WIN32_LEAN_AND_MEAN 宏。由于历史原因,头文件Windows.h默认地包含Windows Sockets 1.1版的头文件Winsock.h。在头文件Winsock.h中的声明会和Windows Socket2需要的头文件Winsock2.h中的声明冲突。WIN32_LEAN_AND_MEAN宏防止Windows.h包含Winsock.h。
要使用Winsock2.h和Windows.h:
选择1.先包含Winsock2.h,再包含Windows.h
选择2.先定义WIN32_LEAN_AND_MEAN宏