Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
prakt-Storozhok.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
7.98 Mб
Скачать

Занятие 8. СокетыWindows. Создание клиент-серверного приложения работающего по протоколуUdp

В предлагаемой работе рассматриваются функции библиотеки Windsock для работы с протоколами, неориентированными на соединение. Протокол UDP стека TCP/IP является именно таким протоколом.

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

1. Теоретическое введние

В теоретическом введении рассматриваются следующие вопросы.

  • Назначение сокетов WINDOWS.

  • Функции WINSOCK для протокола UDP.

  • Алгоритм работы WINSOCK-приложения но протоколу UDP.

1.1. Сокеты windows

Для работы с протоколами транспортного уровня а ОС Windows используется библиотека сокетов — Winsock.dll. В Windows 2000 входит Winsock версии 2.2.

Один из фундаментальных вопросов сетевого программирования - это различие, между протоколами, требующими установления логического соединения, и протоколами, не требующими логического соединения.

При работе с протоколом, не требующим соединения, каждый пакет, именуемый датаграммой, адресуется и посылается приложением индивидуально. То есть каждая датаграмма - это независимая единица, не имеющая ничего общего с остальными датаграммами, которыми обмениваются приложения. Обычно это означает, что клиент и сервер не ведут сложного диалога - клиент посылает запрос, а сервер отвечает на него. Если позже клиент посылает новый запрос, то с точки зрения протокола это новая транзакция, не связанная с предыдущей. Кроме того, протокол не надежен, то есть не гарантируется, что датаграммы не будут потеряны или будут доставлены в том же порядке.

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

Если пакет поступает не в порядке очередности, то получатель может «придержать» его, пока не придут логически предшествующие пакеты. У типичного протокола, требующего наличия соединения, есть три фазы. Сначала устанавливается соединение между двумя приложениями. Затем происходит обмен данными. И, наконец, когда оба приложения завершили обмен данными, соединение разрывается.

Далее рассматриваются функции библиотеки Windsock для работы с протоколами UDP стека TCP/IP, неориентированными на соединение.

1.2. Функции winsock для протокола udp

При работе по протоколу UDP должна выполняться нижеописанная последовательность команд.

1.2.1. Инициализация интерфейса сокетов

function WSA Startup(

wVersionRequired: word;

var WSData: TWSAData

): Integer; stdcall;.

Параметр wVersionRequested задает версию загружаемой библиотеки Winsock. Старший и младший байты определяют дополнительный и основной номера версии библиотеки соответственно, Для получения значения параметра wVersionRequested можно использовать макрос МАКEWORD(x, у), где х - старший байт, а у - младший.

Параметр WSData - указатель на структуру WSAData, которая при вызове функции WSAStartup заполняется сведениями о версии загружаемой библиотеки:

WSAData=record

wVersion: Word;

wHighVersion: Word;

szDescription: array[0..WSADESCRIPTION_LEN] of Char;

szSystemStatus: array[0..WSASYS_STATUS_LEN] of Char;

iMaxSockets: Word;

iMaxUdpDg: Word;

lpVendorInfo: PChar;

end;.

WSAStartup присваивает параметру wVersion значение загружаемой версии. Параметр wHighVersion содержит номер последней доступной версии Winsock. Причем в обоих полях старший байт определяет допол­нительный, а младший - основной номер версии.

Поля szDescription и szSystemStatus заполняются не во всех реализациях Winsock и практически не применяются.

Не используйте и поля iMaxSockets и MaxUdpDg. Предполагается, что в них заданы максимальное количество одновременно открытых сокетов и максимальный размер датаграммы. Максимальное количество одновременно открытых сокетов зависит от свободной физической памяти.

Поле IpVendorInfo зарезервировано для информации изготовителя реализации Winsock и не используется ни на одной из платформ Win32.

Разные платформы Windows поддерживают следующие версии Winsock: Windows 95 - 1.1; Windows 98, NT 4.0, 2000 - 2.2.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]