12

有谁知道 WinSock.h 和 WinSock2.h 之间的区别。我知道他们不使用相同的库 (.lib),但我不知道 WinSock2 是否只添加了新功能,或者它是否也改进了 WinSock 1 的功能。我正在使用 IP/TCP 套接字并希望使用 select() 管理超时。我还使用多个线程同时管理多个客户端。我应该继续使用 WinSock 1.1 还是应该迁移到 WinSock 2?提前致谢。

4

2 回答 2

17

您可能应该使用winsock2.h.

几点:

  • winsock.h应该wsock32.libwinsock2.h应该一起使用ws2_32.lib
  • winsock.h并且winsock2.h不应该在同一个项目中,winsock2.h替换winsock.h而不是扩展它。
  • winsock.h仅当您针对 Windows 95 / Windows NT 3.5 等旧版本的 Windows 时才应使用。

微软实施

Winsock 的1.1 ( winsock.h) 版在 Windows for Workgroups(代号为 Snowball)的附加包(称为 Wolverine)中提供。它是 Windows 95 和 Windows NT 3.5 及更高版本的一个组成部分(Windows NT 的初始商业版本 3.1,仅包括基于 AT&T UNIX System V“Streams”的专有且相当不完整的 TCP/IP 实现“API。

Winsock 2.1 ( winsock2.h) 版是在 Windows 95 的附加程序包中提供的。它是 Windows 98、Windows NT 4.0 和所有后续 Windows 版本的组成部分。Winsock 2.x 的最新版本已与新的 Windows 版本一起提供或作为服务包的一部分提供。

Winsock2 是否添加了功能?

Winsock 2 可通过一种称为分层服务提供程序 (LSP) 的机制进行扩展。Winsock LSP 可用于广泛的有用目的,包括 Internet 家长控制、Web 内容过滤、QoS 等。

于 2012-12-30T20:50:19.793 回答
8

Winsock.h 用于保持从 16 位版本的 Windows 开始的代码编译。您应该始终使用 Winsock2.h 并在新项目中链接到 ws2_32.lib。

于 2012-12-30T20:46:40.070 回答