包含文件

用于 Windows 套接字 1.1 的原始包含文件是 Winsock.h 头文件。 为了轻松地将基于 Berkeley UNIX 套接字的现有源代码移植到 Windows 套接字,建议为 Winsock 1.1 提供 Windows 套接字开发工具包,其中包含多个与标准 UNIX 包含文件相同的名称的文件(例如,sys/socket.h 和 arpa/inet.h 头文件)。 但是,这些类似名称的 Winsock 头文件仅包含一个指令,用于包含 Winsock2.h 头文件。

当 Windows 套接字 2 发布时,用于 Windows 套接字的主包含文件已重命名为 Winsock2.h。 Winsock 1.1 的旧原始 Winsock.h 头文件也保留,以便与旧版应用程序兼容。 自 Windows 2000 发布以来,Winsock 1.1 兼容应用程序的开发已弃用。 现在,所有应用程序都应在 Winsock 应用程序源文件中使用 include Winsock2.h 指令。

Winsock2.h 头文件包含大多数 Winsock 函数、结构和定义。 Ws2tcpip.h 头文件包含 WinSock 2 Protocol-Specific 附件文档中介绍的定义,其中包含用于检索 IP 地址的较新的函数和结构。 其中包括 getaddrinfogetnameinfo 系列函数,这些函数为 IPv4 或 IPv6 地址提供名称解析。 仅当应用程序需要这些与 IP 无关的命名函数时,才需要 Ws2tcpip.h 头文件。

Mswsock.h 头文件包含 Windows 套接字 2(TransmitFileAcceptExConnectEx等)的特定于 Microsoft windows 套接字 2 的扩展的定义。 除非应用程序使用这些特定于Microsoft扩展,否则通常不需要 Mswsock.h 头文件。

Winsock2.h 头文件在内部包含 windows.h 头文件中 的核心元素,因此 Winsock 应用程序中的 Windows.h 头文件通常没有 #include 行。 如果 Windows.h 头文件需要 #include 行,则应在 #define WIN32_LEAN_AND_MEAN 宏前面。 出于历史原因,Windows.h 标头默认包括 Windows 套接字 1.1 的 Winsock.h 头文件。 Winsock.h 头文件中的声明将与 Windows Sockets 2 所需的 Winsock2.h 头文件中的声明冲突。 WIN32_LEAN_AND_MEAN宏可防止 Windows.h 标头包含 Winsock.h。 下面显示了一个说明这一点的示例。

#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>

#pragma comment(lib, "Ws2_32.lib")

int main() {
  return 0;
}

创建基本 Winsock 应用程序

Winsock 入门

将套接字应用程序移植到 Winsock

Winsock 编程注意事项