Поделиться через


Включение файлов

Исходный файл включения для использования с сокетами Windows 1.1 был файл заголовка Winsock.h . Чтобы упростить перенос существующего исходного кода на основе сокетов Berkeley UNIX в сокеты Windows, рекомендуется предоставить комплекты средств разработки сокетов Windows для Winsock 1.1, включая несколько файлов с теми же именами, что и стандартные файлы UNIX: файлы sys/socket.h и arpa/inet.h, например. Однако эти файлы заголовков Winsock с аналогичным именем просто содержали директиву для включения файла заголовка Winsock2.h .

После выпуска сокетов Windows 2 основной файл включения для использования с сокетами Windows был переименован в Winsock2.h. Старый исходный файл заголовка Winsock.h для Winsock 1.1 также был сохранен для совместимости с старыми приложениями. Разработка совместимых приложений Winsock 1.1 устарела с момента выпуска Windows 2000. Теперь все приложения должны использовать директиву Winsock2.h в исходных файлах приложения Winsock.

Файл заголовка Winsock2.h содержит большинство функций, структур и определений Winsock. Файл заголовка Ws2tcpip.h содержит определения, представленные в документе приложения WinSock 2 для TCP/IP, который включает новые функции и структуры, используемые для извлечения IP-адресов. К ним относятся семейство функций getaddrinfo и getnameinfo, которые предоставляют разрешение имен для адресов IPv4 или IPv6. Файл заголовка Ws2tcpip.h необходим только в том случае, если эти функции именования IP-адресов не зависят от приложения.

Файл заголовка Mswsock.h содержит определения для расширений, относящихся к Корпорации Майкрософт, к windows Sockets 2 (TransmitFile, AcceptEx и Подключение Ex, например). Файл заголовка Mswsock.h обычно не требуется, если эти расширения майкрософт не используются приложением.

Файл заголовка Winsock2.h внутренне включает основные элементы из файла заголовка Windows.h, поэтому обычно нет строки #include для файла заголовка Windows.h в приложениях Winsock. Если для файла заголовка Windows.h требуется строка #include, то перед ним следует дождаться макроса #define WIN32_LEAN_AND_MEAN. По историческим причинам заголовок Windows.h по умолчанию включает файл заголовка Winsock.h для Сокетов Windows 1.1. Объявления в файле заголовка Winsock.h конфликтуют с объявлениями в файле заголовка Winsock2.h, необходимом для Windows Sockets 2. Макрос WIN32_LEAN_AND_MEAN предотвращает включение Winsock.h заголовком Windows.h . Ниже показан пример иллюстрации.

#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>

#pragma comment(lib, "Ws2_32.lib")

int main() {
  return 0;
}

Создание базового приложения Winsock

Начало работы с Winsock

Перенос приложений сокета в Winsock

Рекомендации по программированию Winsock