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

新手上路,请多包涵

我将其包括在内,因为它是 MySQL C 库所要求的。

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

它们是否可以互换,并且其中一个比另一个有什么优势?

谢谢!

原文由 James 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 656
2 个回答

@cost 的回答 链接 到一个讨论,除其他外,该讨论提出了一个从未回答过的问题:

有什么原因我不能在winsock2.h之前包含windows.h,它给了我很多错误,但是一旦我切换他们的顺序一切都好……为什么会这样?

windows.h 默认包括 winsock.h (如果 WIN32_LEAN_AND_MEAN 未定义)。不过,问题不仅限于 windows.h 。任何时候 winsock.h 被包含在 winsock2.h 之前,都会出现编译器错误。

原因是这两个文件 不能 很好地共存。 winsock2.h 旨在 替换 winsock.h ,而不是扩展它。在 winsock.h 中定义的所有内容也在 winsock2.h 中定义。

If winsock2.h is included before winsock.h , winsock2.h defines _WINSOCKAPI_ to prevent the compiler from processing subsequent winsock.h includes,一切都很好。

But if winsock.h is included before winsock2.h , winsock2.h does not detect that and tries to re-define everything that winsock.h has already defined,导致编译失败。

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

原文由 Remy Lebeau 发布,翻译遵循 CC BY-SA 4.0 许可协议

你应该使用 winsock2.h 除非你想使用 Winsock 1.1。 winsock2.h 适用于 Winsock 2。

您可以在 Wikipedia Winsock 页面上 阅读有关它的更多信息。

原文由 Seth Carnegie 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题