Поддерживает ли MFC winsock2? - PullRequest
2 голосов
/ 02 августа 2010

Я более свежий в Visual Studio. Я читал, где MFC поддерживает только winsock1. Правда ли, что MFC не поддерживает winsock2?

Ответы [ 2 ]

1 голос
/ 02 августа 2010

Я просто цитирую здесь .

Изменение:

#include <winsock.h>

На:

#include <winsock2.h>

нене имеет значения, кроме возможности использовать определенные вызовы winsock2.Вы можете использовать winsock2, даже если вы используете только winsock.h.Реальное различие происходит независимо от того, используете ли вы ссылку на wsock32.lib (winsock 1.1) или ws2_32.lib (winsock 2.2).Как я уже говорил, вы должны использовать это.Простое изменение заголовочных файлов или библиотеки, на которую вы ссылаетесь, не имеет никакого значения в производительности, эффективности и т.п.На самом деле вы можете потерять совместимость с os, которая поддерживает чистые вызовы BSD-сокетов при переходе на ws2, когда он не используется.

Winsock2 пришел для производительности.Управление вводом-выводом осуществляется с помощью Windows Kernal (например, с перекрытием ввода-вывода).Все ваши winsock 1.1, такие как базовые вызовы send / recv, напрямую сопоставляются с аналогом winsock 2.2 (WSASend / WSARecv) .winsock2 является чисто нисходящей совместимостью с winsock.

1 голос
/ 02 августа 2010

Как ни странно, да, похоже, он использует только 1.1.

Вы должны иметь исходный код с вашей установкой VS - вы увидите, что в stdafx.h он включает winsock.h (не 2) и в sockcore.cpp есть код для инициализации 1.1.MFC в VS2010 такой же.

Если вы хотите использовать winsock2 в своем собственном коде, вам придется включить заголовок перед заголовком MFC в stdafx.h вашего проекта, чтобы объявления не конфликтовали.Надеемся, что это не сломает интерфейс AfxSocket, хотя: - /

...