Интерфейс сокетов Windows

Содержание

Слайд 2

Происхождение Winsock

Интерфейс Беркли — всего лишь одна (хотя и чаще всего используемая)

Происхождение Winsock Интерфейс Беркли — всего лишь одна (хотя и чаще всего
реализация интерфейса прикладного программирования, основанная на модели сокетов.
Сокеты Windows (часто называемые “Winsock”) — также интерфейс прикладного программирования, разработанный на основе сокетов Беркли. Тогда как сокеты Беркли используются на разных операционных системах, Winsock предназначен исключительно для семейства Windows.
В состав Winsock входит множество функций из интерфейса Беркли, изначально разработанных для Unix — операционной системы, для которой и предназначались сокеты Беркли. Кроме того, имеется набор специфических для Windows функций, позволяющих программистам пользоваться преимуществами интерфейса Windows, основанного на передаче сообщений.

Слайд 3

Реализация Winsock

Спецификация Windows Sockets описывает стандарт, по которому программы Windows обязаны общаться

Реализация Winsock Спецификация Windows Sockets описывает стандарт, по которому программы Windows обязаны
с сетями на базе TCP/IP. Таким образом, Windows Sockets API представляет колоссальные возможности в развитии старых и написании новых сетевых приложений. Корпорация Microsoft, создатель и владелец Windows, не имеет имущественных прав на стандарт Winsock. Усилия, необходимые для создания спецификации Windows Sockets, были затрачены большим количеством людей, работающих в различных корпорациях. Цель разработки — создание единого интерфейса прикладного программирования (API), который бы использовался в равной мере как разработчиками, так и продавцами сетевого программного обеспечения и служил бы стандартом работы с TCP/IP для Windows.
Интерфейс сокетов Windows не входит в состав Windows, а реализован в виде динамически загружаемой библиотеки (DLL).

Слайд 4

Краткое обозрение библиотеки функций Winsock

Интерфейс прикладного программирования Winsock содержит набор (библиотеку) функций

Краткое обозрение библиотеки функций Winsock Интерфейс прикладного программирования Winsock содержит набор (библиотеку)
общего пользования, требуемых для решения определенного класса задач. Спецификация Winsock разделяет всю библиотеку на три группы:
• Функции сокетов в стиле Беркли, включенные в состав Winsock API.
• Функции для работы с базами данных, позволяющие программам получать информацию об именах доменов, коммуникационных службах и протоколах.
• Специфические функции Windows, расширяющие набор функций интерфейса сокетов Беркли.

Слайд 5

Функции интерфейса сокетов

Блокирующая операция задерживает выполнение программы до окончания своей работы. Как

Функции интерфейса сокетов Блокирующая операция задерживает выполнение программы до окончания своей работы.
правило, все функции сетевого ввода-вывода сокетов в стиле Беркли — блокирующие. На деле, блокирование проявляется задержкой в выполнении программы до окончания передачи-приема сетевых данных.

Слайд 6

Функции сокетов в стиле Беркли, которые могут блокировать выполнение операций в Winsock

Функции сокетов в стиле Беркли, которые могут блокировать выполнение операций в Winsock API.
API.

Слайд 7

Accept

Подтверждает запрос на установление соединения. Образует новый сокет и соединяет его с

Accept Подтверждает запрос на установление соединения. Образует новый сокет и соединяет его
удаленным сетевым компьютером, запрашивающим соединение. Исходный сокет возвращается в состояние приема входящих запросов.

Слайд 8

closesocket

Закрывает одну сторону в соединении сокетов.

connect

Устанавливает соединение на указанном

closesocket Закрывает одну сторону в соединении сокетов. connect Устанавливает соединение на указанном сокете.
сокете.

Слайд 9

recv

Принимает данные из соединенного сокета.

recvfrom

Принимает данные из соединенного или

recv Принимает данные из соединенного сокета. recvfrom Принимает данные из соединенного или не соединенного сокета.
не соединенного сокета.

Слайд 10

select

Выполняет синхронные мультиплексные операции ввода-вывода путем наблюдения за состоянием нескольких сокетов.

select Выполняет синхронные мультиплексные операции ввода-вывода путем наблюдения за состоянием нескольких сокетов.

send

Передает данные через соединенный сокет.

sendto

Передает данные через не соединенный или соединенный сокет.

Слайд 11

Можно заметить, что все, описанные выше, функции либо производят операции ввода-вывода, либо

Можно заметить, что все, описанные выше, функции либо производят операции ввода-вывода, либо
ждут окончания сетевого ввода-вывода до того, как завершить выполнение. Отсюда можно сделать вывод, что любая функция, так или иначе связанная с операциями ввода-вывода, может блокировать выполнение остальных функция Winsock API.
Следующие функции не выполняют операций ввода-вывода в процессе работы. Они либо преобразуют информацию, либо имеют дело с локальным сокетом сетевого компьютера. Другими словами, их деятельность не связана с удаленными сетевыми устройствами. Поэтому, несмотря на то, что они также являются функциями в стиле Беркли, ни одна из них не блокирует операции прикладной программы.

Слайд 12

Функции в стиле Беркли, не блокирующие работу Winsock API

Функции в стиле Беркли, не блокирующие работу Winsock API

Слайд 13

bind

Присваивает имя неинициализированному (новому) сокету.

getpeername

Получает имя удаленного процесса, связанного с

bind Присваивает имя неинициализированному (новому) сокету. getpeername Получает имя удаленного процесса, связанного
указанным сокетом. (Winsock API хранит эту информацию в локальной структуре данных, поэтому вызов данной функции не связан с операциями сетевого ввода-вывода.)

getsockname

Возвращает имя указанного местного (локального) сокета.

Слайд 14

getsockopt

Возвращает статус (опции) указанного сокета.

htonl

Преобразует порядок байтов в 32-разрядном числе из

getsockopt Возвращает статус (опции) указанного сокета. htonl Преобразует порядок байтов в 32-разрядном
машиннозависимого в сетевой.

htons

Преобразует порядок байтов в 16-разрядном числе из машиннозависимого в сетевой.

Слайд 15

inetaddr

Преобразует строку с IP-адресом в формате десятичное с точкой в 32-разрядное двоичное

inetaddr Преобразует строку с IP-адресом в формате десятичное с точкой в 32-разрядное
число (с сетевым порядком байтов).

inetntoa

Преобразует IP-адрес в формат десятичное с точкой.

ioctlsocket

Управляет параметрами сокета, относящимися к обработке операций сетевого ввода/вывода.

Слайд 16

listen

Переводит указанный сокет в состояние прослушивания запросов на входное соединение. (Функция переводит

listen Переводит указанный сокет в состояние прослушивания запросов на входное соединение. (Функция
сокет в режим прослушивания, однако сама по себе не производит никаких операций сетевого ввода-вывода.)

ntohl

Преобразует порядок байтов 32-разрядного числа из сетевого в машиннозависимый (порядок хоста).

ntohs

Преобразует порядок байтов 16-разрядного числа из сетевого в машиннозависимый (порядок хоста).

Слайд 17

setsockopt

Устанавливает режим (опции) работы сокета.

shutdown

Закрывает одну сторону дуплексного соединения (только

setsockopt Устанавливает режим (опции) работы сокета. shutdown Закрывает одну сторону дуплексного соединения
для местного компьютера).

socket

Образует точку сетевого соединения и возвращает дескриптор сокета.

Слайд 18

Функции Winsock API для работы с базами данных

Они позволяют прикладной программе

Функции Winsock API для работы с базами данных Они позволяют прикладной программе
получать информацию об именах доменов, коммуникационных службах и протоколах. Для выполнения своих задач этим функциям приходится обращаться к разнообразным, как местным, так и удаленным, источникам информации. Спецификация Winsock определяет интерфейс, а также формат данных, который возвращается функциями для работы с базами данных. Вопросы хранения и выборки данных зависят от конкретной реализации Winsock и не оговариваются в стандарте.

Слайд 19

gethostbyaddr

Возвращает имя (имена) по указанному сетевому адресу.

gethostbyname

Возвращает имя (имена) и IP-адрес,

gethostbyaddr Возвращает имя (имена) по указанному сетевому адресу. gethostbyname Возвращает имя (имена)
соответствующие указанному сетевому имени.

gethostname

Возвращает имя локального сетевого компьютера.

Слайд 20

getprotobyname

Возвращает официальное имя и номер протокола по указанному имени (например, TCP).

getprotobyname Возвращает официальное имя и номер протокола по указанному имени (например, TCP).
(В семействе протоколов TCP/IP каждому протоколу соответствует уникальное целое число.)

getprotobynumber

Возвращает имя и номер протокола по указанному номеру.

getservbyname

Возвращает имя сетевой службы (например, time) и номер порта протокола, соответствующие указанному имени.

Слайд 21

Некоторые из вышеописанных функций возвращают указатели на значения, хранящиеся в системной области

Некоторые из вышеописанных функций возвращают указатели на значения, хранящиеся в системной области
памяти. Реализация Winsock может использовать такие области повторно при вызове следующей функции. Это значит, что, если программа желает использовать полученное значение переменной, его необходимо переписать в переменную, принадлежащую программе, до следующего вызова функций, иначе оно может оказаться утерянным. Данные, находящиеся в системных буферах, действительны только до следующего вызова функции Winsock.

getservbyport

Возвращает имя сетевой службы и номер порта протокола, соответствующие указанному номеру порта.

Слайд 22

Интерфейс прикладного программирования Winsock включает так называемые асинхронные (специфические для Windows) аналоги

Интерфейс прикладного программирования Winsock включает так называемые асинхронные (специфические для Windows) аналоги
всех функций для работы с базами данных, за исключением gethostname. В дальнейшем мы еще обсудим асинхронные функции Windows. Асинхронные функции представляют собой Windows-расширения интерфейса сокетов Беркли. Они появились в результате стремления разработчиков использовать встроенный в Windows механизм обмена сообщениями.

Слайд 23

Асинхронные функции для работы с базами данных в составе Winsock API

Асинхронные функции для работы с базами данных в составе Winsock API

Слайд 24

Функции-расширения, специфические для Windows

WSAAsyncSelect

Асинхронный вариант функции select

WSACancelAsyncRequest

Прекращает некорректное выполнение функции

Функции-расширения, специфические для Windows WSAAsyncSelect Асинхронный вариант функции select WSACancelAsyncRequest Прекращает некорректное выполнение функции WSAAsyncGetXByY.
WSAAsyncGetXByY.

Слайд 25

WSACancelBlockingCall

Прекращает некорректное выполнение блокирующей функции API.

WSACleanup

Уведомляет Windows Sockets о том,

WSACancelBlockingCall Прекращает некорректное выполнение блокирующей функции API. WSACleanup Уведомляет Windows Sockets о
что программа закончила работу с DLL.

WSAGetLastError

Возвращает сообщение о последней ошибке при вызове функции.

Слайд 26

WSAIsBlocking

Определяет, является ли низлежащий уровень Winsock DLL блокирующим.

WSASetBlockingHook

Устанавливает ловушку блокирующего

WSAIsBlocking Определяет, является ли низлежащий уровень Winsock DLL блокирующим. WSASetBlockingHook Устанавливает ловушку
вызова.

WSASetLastError

Фиксирует сообщение об ошибке для последующего вызова WSAGetLastError.

Слайд 27

WSAStartup

Инициализирует низлежащий уровень Winsock DLL.

WSAUnhookBlockingHook

Восстанавливает первоначальную блокирующую функцию.

WSAStartup Инициализирует низлежащий уровень Winsock DLL. WSAUnhookBlockingHook Восстанавливает первоначальную блокирующую функцию.

Слайд 28

Общая картина

Чтобы осознать картину программирования в Windows целиком, нужно понимать, какое место

Общая картина Чтобы осознать картину программирования в Windows целиком, нужно понимать, какое
в ней занимает Winsock и какие именно функции системы им выполняются. Множество фирм продают свои приложения, полезные утилиты и программы Для того кто не знаком со структурой Winsock, бывает сложно определить, где заканчивается разработка и начинается Winsock.
Модуль WINSOCK.DLL находится между стеком протоколов TCP/IP и клиентскими приложениями. Другими словами, он управляет интерфейсом к стеку TCP/IP.

Слайд 29

интерфейс Winsock вписывается в общую схему разработки TCP/IP программ для Windows.

интерфейс Winsock вписывается в общую схему разработки TCP/IP программ для Windows.

Слайд 30

Протоколы высокого уровня

Как правило, интерфейс протоколов высокого уровня, показанный на рис., разрабатывается

Протоколы высокого уровня Как правило, интерфейс протоколов высокого уровня, показанный на рис.,
поставщиком программного продукта. Этот уровень располагается между программами Windows и модулем WINSOCK.DLL. Протоколом высокого уровня может являться продукт вызова удаленных процедур (Remote Procedure Call, RPC) или что-нибудь еще, обеспечивающее подобные услуги.

Слайд 31

Создание нового сокета

Следующий оператор демонстрирует, как создается новый сокет:
socket_handle = socket(protocol_family,

Создание нового сокета Следующий оператор демонстрирует, как создается новый сокет: socket_handle =
socket_type, protocol);
Дескриптор сокета Winsock не соответствует дескриптору сокета Беркли. Все аргументы, однако, в точности соответствуют аргументам функции в стиле Беркли.

Слайд 32

Настройка сокета

Используются те же функции что и для сокетов Беркли.

Настройка сокета Используются те же функции что и для сокетов Беркли.

Слайд 33

Соединение через сокет

Следующий оператор демонстрирует образец вызова connect:
result = connect(socket_handle, remote_socket_address, address_length);
Другие

Соединение через сокет Следующий оператор демонстрирует образец вызова connect: result = connect(socket_handle,
функции так же аналогичны

Слайд 34

Файлы заголовков

В программах Winsock указывается только один файл-заголовок winsock.h. Он указывается всегда

Файлы заголовков В программах Winsock указывается только один файл-заголовок winsock.h. Он указывается
(#include ), если приложение работает с сокетами или вызывает любую функцию, входящую в Winsock. В большинстве Windows-программ требуется также указывать файл-заголовок windows.h. Если winsock.h включен, то необходимости дополнительно включать windows.h нет — это делается автоматически в файле winsock.h, поскольку он не может обойтись без windows.h.

Слайд 35

Управление данными

При разработке Windows-программ необходимо учитывать следующую особенность: любой объект памяти, например

Управление данными При разработке Windows-программ необходимо учитывать следующую особенность: любой объект памяти,
буфер или переменная, должен быть доступен для WINSOCK. DLL в любой момент времени при исполнении операций Winsock. В многопоточных версиях Windows программа обязана самостоятельно координировать доступ к объектам памяти. Об этом прямо сказано в спецификации Winsock, где указано, что реализации Winsock (WINSOCK.DLL) не отвечают за управление памятью программы.

Слайд 36

Обязательные функции Winsock

В Winsock определены две обязательные для исполнения функции: WSAStartup

Обязательные функции Winsock В Winsock определены две обязательные для исполнения функции: WSAStartup
и WSACleanup. Первая вызывается перед тем, как вызвать любую другую функцию Winsock. Вторая — по окончании работы с Winsock. Для каждой функции WSAStartup всегда должна вызываться соответствующая функция WSACleanup.

Слайд 37

Функция WSAStartup

Функция WSAStartup позволяет программе указать требуемую версию Winsock. Она также позволяет

Функция WSAStartup Функция WSAStartup позволяет программе указать требуемую версию Winsock. Она также
программе получить информацию о конкретной реализации Winsock. Фактически, при вызове WSAStartup происходит диалог между программой и модулем WINSOCK.DLL. Возможность узнавать версию Winsock предусмотрена для того, чтобы обеспечить разработку программ, использующих более новые и не работающих со старыми версиями Winsock. Такая программа указывает минимальную версию, с которой она еще может работать, а Winsock — наиболее высокую версию из тех, что он может обеспечить. Далее программа решает, как ей лучше поступить в том или ином случае.

Слайд 38

Функция WSACleanup

Прикладная программа может вызывать WSAStartup несколько раз за время работы. Это

Функция WSACleanup Прикладная программа может вызывать WSAStartup несколько раз за время работы.
может понадобиться, например, если в разных частях программы требуется узнать версию WINSOCK.DLL. И вместо того чтобы отводить глобальный массив для хранения версии, программа вызывает WSAStartup. Функция WSACleanup органично дополняет WSAStartup. На каждый вызов функции WSAStartup должен приходиться вызов WSACleanup. Winsock регистрирует каждый вызов WSAStartup при помощи внутреннего счетчика вызовов. Каждый раз при вызове WSAStartup значение счетчика увеличивается. При вызове WSACleanup, наоборот, уменьшается. Последняя, вызванная программой функция WSACleanup (устанавливающая счетчик в ноль) заставляет Winsock произвести операции по очистке буферов, переменных и т. д., имевших отношение к программе.

Слайд 39

Реализация Winsock (WINSOCK.DLL) отводит внутренние статические области памяти для зарегистрировавшейся в ней

Реализация Winsock (WINSOCK.DLL) отводит внутренние статические области памяти для зарегистрировавшейся в ней
программы. Каждая программа получает собственные области памяти, к которым можно обращаться только через Winsock API. Области памяти являются внутренними для Winsock точно так же, как и структуры данных сокета. Последняя вызванная WSACleanup говорит Winsock, что он не нужен больше программе, следовательно, можно освободить все ресурсы, отведенные ранее для этой программы. Функция WSAStartup начинает работу программы с Winsock, a WSACleanup прекращает ее.
Имя файла: Интерфейс-сокетов-Windows.pptx
Количество просмотров: 135
Количество скачиваний: 0