Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Гараев Р.А. Программирование WinSock.doc
Скачиваний:
70
Добавлен:
02.05.2014
Размер:
765.44 Кб
Скачать

21

Теоретическое введение. Основы программирования

С использованием Winsock

Подготовлено р.А.Гараевым для срс к экзамену

Введение

Winsock – это сетевой интерфейс прикладного программирования, реализованный на всех платформах Win32, основной интерфейс доступа к разным базовым сетевым протоколам. Интерфейс унаследовал многое от реализации Berkeley (BSD) Sockets на платформах UNIX. В средах Win32 он стал абсолютно независимым от протокола, особенно с выпуском Winsock 2. Термин Сокеты (sockets) используется для обозначения описателей поставщиков транспорта. В Win32 сокет отличается от описателя файла, а потому представлен отдельным типом - SOCKET. В технической литературе можно найти различные переводы этого слова - их называют и гнездами, и разъемами, соединителями, патронами и т. д. Ввиду отсутствия устоявшегося русскоязычного термина, в настоящем материала sockets будут именоваться сокетами без какого-либо перевода.

С позиций эталонной модели OSI интерфейс Winsock расположен между сеансовым и транспортным уровнями. Под управлением Windows прикладной, представительский и сеансовый уровни, в основном относятся к вашему приложению.

Программирование с применением сокетов достаточно несложно само по себе, но, к сожалению, сравнительно поверхностно описано в распространенной литературе, а документация Windows Sockets SDK содержит множество ошибок, как в технических описаниях, так и в демонстрационных примерах. Кроме того, существуют значительные отличия реализаций сокетов в UNIX и в Windows, что создает очевидные проблемы.

Ввиду ограниченности объема данного описания, основное внимание ниже сосредоточено, главным образом, на одной версии реализации сокетов - библиотеке Winsock 2 и одном языке программирования – C/C++ (сказанное, как правило, применимо к Delphi, Perl и т.д.) и одном виде сокетов - блокируемых синхронных сокетах.

Первоисточники

Основной материал в изучении сокетов - Windows Sockets 2 SDK. SDK - это документация, набор заголовочных файлов и инструментарий разработчика. Документация, несмотря на недостатки, написана достаточна грамотно и позволяет, хотя и не без труда, освоить сокеты даже без помощи какой-либо другой литературы. Большинство книг, имеющиеся на рынке, явно уступают Microsoft в полноте и продуманности описания. Единственный недостаток SDK - он полностью на английском (для некоторых это существенно).

Из инструментария, входящего в SDK, необходимо, прежде всего, выделить утилиту sockeye.exe, которую можно рассматривать как "тестовый стенд" разработчика. Она позволяет в интерактивном режиме вызывать различные сокет-функции и манипулировать ими.

В демонстрационных программах SDK, к сожалению, встречаются ошибки, причем нередко довольно грубые. В то же время, все примеры содержат множество подробных комментариев и позволяют узнать полезные приемы нетрадиционного программирования, поэтому есть смысл познакомиться с ними.

Из Internet - ресурсов, посвященных программированию с использованием сокетов и всему, что с ними связано, в первую очередь можно отметить следующие: sockaddr.com, http://www.winsock.com/ и http://www.sockets.com/.

Обзор Winsock

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

Устаревшие ОС Windows 3.x поддерживали только асинхронные сокеты, поскольку в среде с корпоративной многозадачностью захват управления одной задачей "подвешивает" все остальные, включая и саму систему. ОС Windows 9x и NT/2000/XP поддерживают оба вида сокетов, однако в силу того, что синхронные сокеты программируются более просто, чем асинхронные, последние не получили большого распространения. Данное описание посвящено, главным образом, синхронным сокетам.

Сокеты позволяют работать со множеством протоколов и являются удобным средством межпроцессорного взаимодействия, но в данном разделе речь будет идти только о сокетах семейства протоколов TCP/IP, использующихся для обмена данными между узлами сети Интернет. Все остальные протоколы, такие как IPX/SPX, NetBIOS будут представлены в других разделах.

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

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

Замечание: дейтаграммные сокеты опираются на протокол UDP, а потоковые на TCP.