【问题标题】:Is there a difference between <winsock.h> and <winsock2.h>?<winsock.h> 和 <winsock2.h> 之间有区别吗?
【发布时间】:2012-02-05 23:02:39
【问题描述】:

我包含 MySQL C 库所需的内容。

VS2010 中的自动完成功能也显示 - 知道这是什么吗?

它们是否可以互换,一种比另一种有什么优势?

谢谢!

【问题讨论】:

    标签: c++ winsock


    【解决方案1】:

    @cost 的回答 links 对一个讨论,除其他外,提出了这个从未回答过的问题:

    我不能在winsock2.h之前包含windows.h有什么原因吗? 它给了我很多错误,但是一旦我改变了他们的顺序,一切 没关系……这是为什么呢?

    windows.h 在为较新的 Windows 版本编译时包含 winsock2.h,但对于较旧的开发,它包含 winsock.h。不过,问题不仅限于windows.h。任何时候在winsock2.h 之前包含winsock.h,都会出现编译器错误。原因是这两个文件DO NOT 很好地共存。 winsock2.h 旨在替换 winsock.h,而不是扩展它。在winsock.h 中定义的所有内容也在winsock2.h 中定义。如果winsock2.h 包含在winsock.h 之前,则winsock2.h 定义_WINSOCKAPI_ 以防止编译器处理后续的winsock.h 包含,一切都很好。但是如果winsock.h 包含在winsock2.h 之前,winsock2.h 不会检测到它并尝试重新定义winsock.h 已经定义的所有内容,从而导致编译失败。

    在同一个项目中混合使用winsock.h 的代码和使用winsock2.h 的代码时必须非常小心。例如,在编写自己的使用winsock2.h 的套接字代码时,以及使用仍然使用winsock.h 的第三方库时。

    【讨论】:

      【解决方案2】:

      除非您想使用 Winsock 1.1,否则您应该使用 winsock2.hwinsock2.h 用于 Winsock 2。

      您可以在Wikipedia Winsock page 上阅读更多相关信息。

      【讨论】:

        【解决方案3】:

        Winsock2 完全向后兼容原始的 Winsock,因此您想要使用原始 Winsock 的唯一原因是您的目标平台不支持 Winsock2(所有比 Windows 3.11 更新的版本都支持 winsock2 I相信)。

        【讨论】:

          猜你喜欢
          • 2012-12-15
          • 1970-01-01
          • 2012-02-16
          • 1970-01-01
          • 1970-01-01
          • 2020-01-11
          • 2016-12-02
          • 2021-10-09
          • 2010-09-27
          相关资源
          最近更新 更多