2

我是 Visual Studio 的新手。我读了一些 MFC 仅支持 winsock1 的地方。MFC不支持winsock2是真的吗?

4

2 回答 2

1

奇怪的是,它看起来只使用 1.1。

您应该拥有 VS 安装的源代码 - 您将在 stdafx.h 中看到它包含 winsock.h(不是 2),在 sockcore.cpp 中有用于初始化 1.1 的代码。VS2010的MFC也是一样。

如果您想在自己的代码中使用 winsock2,则必须在项目的 stdafx.h 中的 MFC 标头之前包含标头,这样声明就不会发生冲突。希望这不会破坏 AfxSocket 接口:-/

于 2010-08-02T11:16:27.983 回答
1

我只是从这里引用。

改变:

#include <winsock.h>

到:

#include <winsock2.h>

除了能够使用 winsock2 特定调用之外没有任何区别。即使您只包含winsock.h,您也可能实际上正在使用winsock2。无论您是链接到 wsock32.lib (winsock 1.1) 还是 ws2_32.lib (winsock 2.2),都会产生实际差异。正如我指出的,你必须使用它。只需更改头文件或链接的库,不会对性能、效率等产生任何影响。实际上,在不使用 ws2 时,您可能会失去与支持纯 BSD 套接字调用的操作系统的兼容性。

Winsock2 进来表演。IO 由 Windows 内核管理(例如重叠 io)。你所有的winsock 1.1,比如基本的send/recv调用都直接映射到winsock 2.2对应的(WSASend/WSARecv)。winsock2纯粹是向下兼容winsock。

于 2010-08-02T11:28:59.893 回答