асист.
каф. КСМ Ковальов М.П., ст.гр.
КСМ-06-1 Пільтяй В.О.
Криворізький технічний університет, Україна
Базові поняття про сокети
Windows
Данна
стаття розглядає|розглядує| ряд питань, пов'язаних з поняттям сокет, його призначенням,
використанням у Windows,
перевагами Winsock, а також
піднімає питання функцій API
Winsock.
Загальні поняття про сокет
В процесі мережевого з'єднання
два процеси обмінюються даними. Сокет
(socket) представляє
собою
абстрактну точку мережевого
з'єднання, [2] а
якщо говорити більш конкретніше, то сокет, є кінцевою
точкою мережевих
комунікацій. Кожен сокет, що використовується, має тип|типа| і асоційований з ним процес. Сокети існують у середині комунікаційних доменів.
Домени це абстракції, які мають конкретну структуру адресації і безліч
протоколів, які визначають різні типи
сокетів у середині
домена. Прикладами
комунікаційних доменів можуть бути: UNIX домен, Internet
домен, і т.д.
У
Internet домені, сокет – це
комбінація IP адреси і номера
порту, яка однозначно визначає окремий мережевий процес у всій глобальній мережі Internet|. Два сокети, один для хоста|-одержувача, інший для хоста|-відправника, визначають з'єднання для протоколів,
орієнтованих на встановлення зв'язку, таких, як TCP. [3]
Сокети Windows
Можливість взаємодії з іншими системами забезпечується в Windows підтримкою сокетів Windows Sockets – сумісного і майже точного аналога сокетів Берклі
(Berkeley Sockets), що де-факто грають роль
промислового стандарту.
Оскільки інтерфейс
Winsock повинен
відповідати промисловому стандарту,
прийняті у ньому угоди про правила привласнення імен
і стилі програмування дещо відрізняються від тих, з якими ми звикли стикатися в процесі роботи
з функціями Windows. Слід зазначити, що Winsock| API
не є частиною Win32/64. Крім того, Winsock надає додаткові функції що не
відповідають стандартам; ці функції використовуються лише у разі крайньої необхідності. [1]
У UNIX інтерфейс сокетів був вбудований в
систему. Інтерфейс Winsock не
входить до складу Windows, а
реалізований у вигляді динамічно завантаженої бібліотеки DLL. [2]
До переваг Winsock можна віднести наступне:
·
Перенесення
вже існуючого коду, написаного для
Berkeley Sockets API, здійснюється безпосередньо.
·
Системи Windows легко вбудовуються в мережі, що використовують, як версію
Ipv4 протоколу TCP/IP, так і
версію IPv6, що поступово
розповсюджується.
·
Сокети можуть використовуватися спільно з введенням/виведенням Windows, що перекривається, що, окрім всього
іншого, забезпечує можливість
масштабування серверів при збільшенні кількості активних клієнтів.
·
Сокети можна розглядати, як дескриптори (типу|типа| HANDLE)
файлів при використанні функцій ReadFile і WriteFile, та з деякими обмеженнями, при
використанні інших функцій. Ця можливість виявляється
зручною в тих випадках, коли потрібне використання асинхронного введення/виведення і портів завершення
введення/виведення.
·
Існують також додаткові, непереносимі розширення. [1]
Функції сокетів
API
Winsock містить набір функцій. Специфікація
Winsock розбиває їх на три
групи:
·
функції сокетів в стилі Берклі, включені в Winsock API;
·
функції для роботи з базами даних, що дозволяють програмам отримувати інформацію про імена
доменів, протоколи і т.д.
·
функції, що розподіляють набір функцій інтерфейсу сокетів
Берклі.
Крім того, всі
функції можна розділити на дві великі групи: блокуючі і не блокуючі.
Блокуюча функція
примушує програму, що
викликала її, чекати
закінчення мережевої
операції введення/виведення.
Як приклад приведемо
декілька функцій цієї групи:
аccept – підтверджує запит на встановлення
з'єднання. Утворює новий сокет і сполучає його з видаленим комп'ютером, що
запрошує з'єднання. Початковий сокет повертається в стан прийому вхідних
запитів.
closesocket – закриває одну
сторону в з'єднанні сокетів;
connect – встановлює з'єднання на
вказаному сокеті;
recv – приймає дані із сполученого
сокета;
send – передає дані через сполучений
сокет;
sendto – передає дані через сполучений
або не сполучений сокет; [2]
Не блокуюча функція
не примушує програму,
що викликала її,
чекати закінчення мережевої
операції введення/виведення.
Вони перетворюють інформацію або мають справу з
локальним сокетом. Як приклад
приведемо декілька функцій цієї групи:
bind – привласнює ім'я неініціалізованому
сокету;
getsockname – повертає ім'я
вказаного локального сокета;
getsockopt – повертає опції вказаного
сокета;
htonl –
перетворює порядок байтів в 32-розрядному числі з машинно-незалежного в
мережевий;
htons – перетворює порядок байтів в
16-розрядному числі з машинно-незалежного в мережевий;
inet_addr – перетворює рядок з IP-адресою у
форматі десяткового з крапкою в 32-розрядне число в мережевому форматі;
inet_ntoa – перетворює IP-адрес у формат
десяткового з крапкою;
listen – встановлює вказаний сокет в
стан прослуховування запитів на вхідне з'єднання. Сама функція не проводить
мережевих операцій введення/виведення;
ntohl – перетворює порядок байтів
32-розрядного числа з мережевого в машинно-залежний;
setsockopt – встановлює опції сокета;
shutdown – закриває одну сторону
видаленого з'єднання;
socket – утворює точку мережевого
з'єднання і повертає дескриптор сокета. [2]
Висновоки
У даній
статті були розглянуті базові
поняття про сокети. Інтерфейс Windows
Sockets надає можливість використання API, промислового стандарту, що
відповідає вимогам, та гарантує роботу програм на різному устаткуванні і майже повну переносимість на рівні
початкового коду.
WinSock здатний підтримати практично
будь-який мережевий
протокол, проте в
більшості випадків застосовується протокол TCP/IP. [1]
Література
1.
Джонсон М. Харт. Системное программирование в среде
Windows, 3-е издание.: Пер. с англ. – М.: Издательский дом «Вильямс», 2005. – 592с.:
ил. – Парал. тит. англ.
2.
Интерфейс сокетов Windows http://home.tula.net
3.
Программирование сокетов http://www.codenet.ru