Winsock2.h 与 winsock2.h 和 wsock32.lib 与 ws2_32.lib

Posted

技术标签:

【中文标题】Winsock2.h 与 winsock2.h 和 wsock32.lib 与 ws2_32.lib【英文标题】:Winsock2.h vs winsock2.h and wsock32.lib vs ws2_32.lib 【发布时间】:2013-07-22 21:17:15 【问题描述】:

我对有关 winsock 的一些事情感到困惑。

首先,包含 Winsock2.h 与 winsock2.h('w' 的大写)有什么区别

二、用ws2_32.lib链接wsock32.lib有什么区别?

我尝试了几种组合,它们会导致编译时错误。谁能解释一下使用什么的逻辑推理?

谢谢 尼克

【问题讨论】:

【参考方案1】:

Winsock2.hwinsock2.h 之间没有区别。文件名在典型的 Windows 文件系统上不区分大小写。 ws2_32.lib 文件用于 Winsock 2,而 wsock32.lib 用于过时的旧版本。

【讨论】:

附录:Winsock 2 (ws2_32.lib) 是 Winsock 1 (wsock32.dll) 的扩展。当前针对 wsock32.dll 工作的程序在重新链接到 ws2_32.dll 时应该仍然可以正常工作。 HawkNL 多播示例 (hawksoft.com/hawknl) 在与 ws2_32.lib 链接时不起作用,但可以与 wsock32.lib 一起使用。但是,一旦您更新#include 以匹配新库 变为 等等,事情又开始工作了。【参考方案2】:

如下所示:https://technet.microsoft.com/en-us/library/cc958787.aspx、wsock32.dll 和 wsock.dll 是 w2_32.dll 的向后兼容 shell

你可以使用wsock32.dll来兼容Win95,或者wsock.dll来兼容win3.11 :) 但是通常它们被Win95和Win3.11程序用来兼容win2K+

wsock32.lib 和 w2_32.lib 包含从动态链接库中导出的函数和数据元素的列表。

注意:wsock32 和 ws_32 之间的一些差异可能是意料之外的。例如 wsock32 将运行 winsock 2.2 版 API -- 但要获得 2.0 版,您需要 w2_32。

【讨论】:

以上是关于Winsock2.h 与 winsock2.h 和 wsock32.lib 与 ws2_32.lib的主要内容,如果未能解决你的问题,请参考以下文章

winsock.h与winsock2.h的区别(同时包含windows.h和winsock2.h报错重定义的问题)

winsock.h与winsock2.h冲突解决

VS2008 编译错误 <winsock2.h>

WinSock2.h 中的重新定义错误 [重复]

包括 stdafx.h winsock2 重新定义错误

<winsock.h> 和 <winsock2.h> 之间有区别吗?