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


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

Исходный файл включения для использования с сокетами 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 Protocol-Specific 2 для TCP/IP, который включает более новые функции и структуры, используемые для извлечения IP-адресов. К ним относятся getaddrinfo и семейство функций getnameinfo, которые предоставляют разрешение имен для IPv4 или IPv6-адресов. Файл заголовка Ws2tcpip.h необходим только в том случае, если эти функции именования IP-адресов требуются приложению.

Файл заголовка mswsock.h содержит определения расширений, относящихся к Корпорации Майкрософт, к сокетам Windows 2 (Передачи файлов, AcceptExи ConnectEx, например). Файл заголовка 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