Поддерживает ли MFC winsock2?

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

2 ответа

Решение

Я просто цитирую отсюда.

Изменение:

#include <winsock.h>

Для того, чтобы:

#include <winsock2.h>

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

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

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

У вас должен быть исходный код с вашей установкой VS - вы увидите, что в stdafx.h он содержит winsock.h (не 2), а в sockcore.cpp есть код для инициализации 1.1. МФЦ VS2010 такой же.

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

Другие вопросы по тегам