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

时间:2012-02-05 23:02:40

标签: c++ winsock

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

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

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

谢谢!

3 个答案:

答案 0 :(得分:24)

@费用的回答links进行了一次讨论,其中包括提出这个从未回答过的问题:

  

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

在为较新的Windows版本进行编译时,

windows.h包括winsock2.h,但对于较早的开发,它包含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的第三方库时。

答案 1 :(得分:7)

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

您可以在Wikipedia Winsock page了解更多相关信息。

答案 2 :(得分:0)

Winsock2 与原来的 winsock 完全向后兼容,所以你想要使用原来的 winsock 的唯一原因是当你的目标平台不支持 winsock2(比 Windows 3.11 更新的所有东西都支持 winsock2 I相信)。