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

Jam*_*mes 15 c++ winsock

我包含了MySQL C库所要求的内容.

VS2010中的自动完成也显示出 - 任何想法是什么?

它们是否可以互换,是否有任何优势?

谢谢!

Rem*_*eau 24

@cost的答案链接到一个讨论,除其他外,问这个问题从未得到回答:

有没有理由我在winsock2.h之前不能包含windows.h,它给了我很多错误,但是一旦我切换它们的顺序,一切都没问题......为什么会这样?

windows.h包括winsock2.h在编译较新的Windows版本时,但对于较旧的开发,它包括winsock.h.但问题不仅限于此windows.h.任何时候winsock.h都包括在内winsock2.h,会有编译器错误.原因是因为这两个文件并不能很好地共存. 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.


Set*_*gie 7

您应该使用,winsock2.h除非您想使用Winsock 1.1.winsock2.h适用于Winsock 2.

您可以在Wikipedia Winsock页面上阅读更多相关信息.