Windows sockets

Winsock або Windows Sockets - це інтерфейс програмування додатків (API) створений для реалізації програм в мережі на основі протоколів TCP / IP.

При взаємодії «клієнт - сервер» в мережі кожного учасника взаємодії можна розглядати як кінцеву точку або іншими словами сокет. Windows Sockets розроблявся на основі інтерфейсу Берклі для UNIX (або BSD сокетів), але до них додані функції підтримки подій Windows. Таким чином, незважаючи на те, що розглянуті тільки Windows Sockets, в цілому програмування сокетів в UNIX системах і Windows схоже.

В даний час існує дві основні версії Winsock API:

1. WinSock 1.1 - здійснюється підтримка тільки протоколів TCP / IP;

2. WinSock 2.0 - введена можливість роботи з різними мережевими протоколами і моделями, наприклад SPX / IPX.

Офіційна специфікація Winsock розділяє функції на три типи:

1. функції Берклі;

2. інформаційні функції (отримання інформації про найменування доменів, службах, протоколах Інтернету);

3. розширення Windows для функцій Берклі.

Всі функції можуть бути блокуючі і неблокірующіх. Зазвичай блокують це функції Берклі. Тобто при роботі такої функції не можна виконувати інші функції WinSock.

Код програми, що здійснює ініціалізацію інтерфейсу Winsock API (WSA) і його деініціалізацію наступний:

Програма скомпільована як консольний проект Win32. Для успішної лінковки необхідно додати в список залежностей додатки файл wsock32.lib, що входить до складу будь-якого сучасного компілятора C ++ для Windows.

За допомогою #include підключаються бібліотечні функції. Далі оголошується константа з номером версії, з якої буде працювати додаток - WINSOCK_VERSION.

Функція WSAStartup () ініціалізує Winsock. Ця функція завжди викликається найпершої при початку роботи з Winsock. Її прототип наступного:

int WSAStartup (WORD wVersionRequested, LPWSADATA lpWSAData);

Перший параметр - це версія, яка буде використовуватися. Молодший байт - основна версія, старший байт - розширення версії. Тобто в прикладі, використовується версія 1.1. Якщо ініціалізація відбулася, то повернеться нульове значення. Ініціалізація полягає в зіставленні номера версії і реально існуючої бібліотеки динамічного компонування (файлу з розширенням DLL) в системній папці Windows.

Другий параметр - це покажчик на структуру WSADATA, в яку повернуться параметри ініціалізації. Структура має наступне визначення:

typedef struct WSAData

unsigned short iMaxSockets;

unsigned short iMaxUdpDg;

char FAR * lpVendorInfo;

> WSADATA, FAR * LPWSADATA;

WSACleanup () завершує використання даного DLL файлу і перериває звернення до функцій Winsock. При вдалому виконанні повернеться нуль. Результат успішної роботи програми наведено на малюнку 2.4.1.

Малюнок 2.4.1 - Ініціалізація і деініціалізацію Winsock API

Схожі статті