首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><winsock.h>和<winsock2.h>有什么区别吗?

<winsock.h>和<winsock2.h>有什么区别吗?
EN

Stack Overflow用户
提问于 2012-02-06 07:02:40
回答 3查看 20.7K关注 0票数 19

正如MySQL C库所要求的那样,我将其包括在内。

VS2010中的自动补全功能也显示出--你知道这是什么吗?

它们是可互换的吗?它们之间有什么优势吗?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-07 07:22:01

@cost的答案links针对一场讨论,其中提出了一个从未得到回答的问题:

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

windows.h在为较新的Windows版本编译时包含winsock2.h,但对于较旧的开发,它包含winsock.h。然而,这个问题并不局限于windows.h。每次在winsock2.h之前包含winsock.h时,都会出现编译器错误。原因是这两个文件不能很好地共存。winsock2.h旨在取代 winsock.h,而不是扩展它。在winsock.h中定义的所有内容也在winsock2.h中定义。如果在winsock.h之前包含winsock2.h,则winsock2.h将定义_WINSOCKAPI_,以防止编译器处理后续的winsock.h包含,这样就没有问题了。但是,如果在winsock2.h之前包含winsock.hwinsock2.h将不会检测到这一点,并尝试重新定义winsock.h已经定义的所有内容,从而导致编译失败。

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

票数 34
EN

Stack Overflow用户

发布于 2012-02-06 07:05:45

除非你想使用Winsock1.1,否则你应该使用winsock2.hwinsock2.h是针对Winsock2的。

你可以在Wikipedia Winsock page上阅读更多关于它的内容。

票数 8
EN

Stack Overflow用户

发布于 2021-02-09 05:25:23

Winsock2与原始的winsock完全向后兼容,所以你想要使用原始的winsock的唯一原因是当你的目标平台不支持winsock2时(我相信比Windows3.11更新的版本都支持winsock2 )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9153911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档