Первые главы посвящены рассмотрению несколько устаревших,
однако все еще использующихся технологий: интерфейса NetBIOS,
перенаправителей Windows, почтовых ящиков и именованных каналов. <...> Далее рассматривается API-интерфейс Winsock, наиболее распространенные сетевые протоколы Winsock, базовая модель программирования
клиент-сервер и соответствующие функции, предоставляемые Win32 API. <...> 3
Интерфейс NetBIOS
Network Basic Input/Output System (NetBIOS) – стандартный
интерфейс прикладного программирования, разработанный еще в 1983
году. <...> В 1985 году
фирма IBM сформировала цельный протокол NetBIOS Extended User
Interface (NetBEUI), интегрированный с интерфейсом NetBIOS. <...> В
настоящее время NetBIOS используется многими приложениями и
операционными системами, включая все варианты Windows (Windows CE
не дает возможности использовать NetBIOS API). <...> Номера LANA
Основное понятие интерфейса NetBIOS – это номера сетевых
адаптеров (Local Area Network Adapter, LANA). <...> Первоначально каждому
5
физическому сетевому адаптеру присваивалось уникальное значение –
номер LANA. <...> Номер LANA соответствует уникальным сочетаниям сетевого
адаптера с транспортным протоколом. <...> Например, если на компьютере
установлено две сетевых платы и два поддерживающих NetBIOS сетевых
протокола, то их сочетаниям будет присвоено четыре номера LANA. <...> Имена NetBIOS
Приложение регистрирует имя на каждом номере LANA, с которым
ему требуется связаться. <...> Имя NetBIOS имеет длину 16 символов, причем
16 символ зарезервирован для специальных целей (определяет сетевую
службу Microsoft, более подробно этот вопрос не рассматриваем). <...> Основы программирования NetBIOS
API-интерфейс NetBIOS содержит всего одну функцию:
UCHAR Netbios (PNCB pncb);
6
Все объявления функций, константы и т.п. определены в
заголовочном файле Nb30.h. <...> Параметр функции Netbios является указателем на блок сетевого
управления (network control block, NCB). <...> Структура NCB определена
следующим образом:
typedef struct _NCB {
UCHAR
ncb_command;
UCHAR
ncb_retcode;
UCHAR
ncb_lsn;
UCHAR
ncb_num;
PUCHAR
ncb_buffer;
WORD
ncb_length;
UCHAR
ncb_callname[NCBNAMSZ];
UCHAR
ncb_name[NCBNAMSZ];
UCHAR
ncb_rto;
UCHAR
ncb_sto;
void
(CALLBACK *ncb_post) (struct _NCB *);
UCHAR <...>
Основы_разработки_сетевых_Windows-приложений__учебное_пособие.pdf
Министерство образования и науки Российской Федерации
Федеральное агентство по образованию
Ярославский государственный университет им. П.Г.Демидова
В.В. Васильчиков
Основы разработки сетевых
Windows-приложений
Учебное пособие
Рекомендовано
Научно-методическим советом университета
для студентов специальностей Прикладная математика
и информатика и Математическое обеспечение
и администрирование информационных систем
Ярославль 2007
Стр.1
УДК 004.4:004.7
ББК 3973.202я73
В 19
Рекомендовано
Редакционно-издательским советом университета
в качестве учебного издания. План 2007 года
Рецензенты:
кандидат физико-математических наук С.И. Щукин;
кафедра теории и методики обучения информатике
ЯГПУ им. К.Д. Ушинского
В 19
Васильчиков, В.В. Основы разработки сетевых Windowsприложений
: учебное пособие / В.В. Васильчиков ; Яросл. гос.
ун-т. – Ярославль : ЯрГУ, 2007. – 212 с.
ISBN 978-5-8397-0533-3
Рассмотрены основные моменты разработки сетевых
приложений для платформы Win32, сетевые функции Windows, а
также наиболее распространенные сетевые протоколы.
Рекомендуется студентам, обучающимся по специальностям
010501 Прикладная математика и информатика (дисциплина
специализации "Программирование в Windows и сетях Windows")
и 010503 Математическое обеспечение и администрирование
информационных систем (дисциплина специализации "Программирование
в сетях Windows") очной формы обучения.
Библиогр.: 5 назв.
УДК 004.4:004.7
ББК 3973.202я73
© Ярославский
государственный
университет, 2007
ISBN 978-5-8397-0533-3
© В.В. Васильчиков, 2007
2
Стр.2
Введение
Данное учебное пособие написано на основе лекционного курса по
программированию в сетях Windows, читавшегося автором для студентов
факультета ИВТ ЯрГУ, обучающихся по специальности "Математическое
обеспечение и администрирование информационных систем".
В пособии рассмотрены существующие технологии и Win32 APIфункции,
использующиеся для создания сетевых приложений различных
версий ОС Windows. При этом все, что говорится о Windows 2000,
остается в силе и для более свежих версий операционной системы.
Первые главы посвящены рассмотрению несколько устаревших,
однако все еще использующихся технологий: интерфейса NetBIOS,
перенаправителей Windows, почтовых ящиков и именованных каналов.
Далее рассматривается API-интерфейс Winsock, наиболее распространенные
сетевые протоколы Winsock, базовая модель программирования
клиент-сервер и соответствующие функции, предоставляемые Win32 API.
При этом основное внимание уделялось программированию протоколов,
построенных на базе протокола IP. Наконец, последняя глава коротко
описывает основные моменты работы с сервером удаленного доступа RAS,
используемого для коммутируемого доступа к Интернет.
Основная часть учебного материала и исходных кодов взята из книги
Джонса и Оланда [1]. Все примеры программ написаны на языке С и не
привязаны к использованию какой-либо конкретной среды программирования.
При этом для организации работы с сетью используются только
Win32 API-функции. Читателям, интересующимся более высокоуровневыми
средствами, например классами библиотеки MFC для работы в
сети, можно порекомендовать обратиться к книгам Олафсена, Скрайбера
и Уайта [3], Круглински, Уингоу и Шеферда [4], а также к документации
MSDN. Однако для понимания устройства и работы этих классов все
же настоятельно рекомендуется изучить использование соответствующих
функций Win32 API.
Для удобства использования все исходные коды, сгруппированные по
темам учебного курса (а на них в тексте пособия постоянно встречаются
ссылки), доступны в локальной сети факультета.
Для лабораторных занятий студентам предлагаются задания по разработке
программ, функционально эквивалентных рассмотренным, однако
имеющих привычный оконный интерфейс. В качестве среды разработки
предполагается использование Microsoft Visual Studio версии 6.0. Проекты
структурированы по темам учебного курса. Предполагаемый результат
находится в папке Solution. Стартовый проект (заготовка с предлагаемым
интерфейсом) находится в папке Starter. Инструкции по выполнению
задания помещены в файл ToDo.doc.
3
Стр.3
Оглавление
Введение .............................................................................................................. 3
Интерфейс NetBIOS .......................................................................................... 4
NetBIOS и сетевая модель OSI ..................................................................... 4
Интерфейс Microsoft NetBIOS ........................................................................ 5
Номера LANA ................................................................................................ 5
Имена NetBIOS .............................................................................................. 6
Основы программирования NetBIOS .............................................................. 6
Синхронный и асинхронный вызов ............................................................. 8
Типовые процедуры NetBIOS ........................................................................... 8
Общие функции приложений NetBIOS ....................................................... 8
Сервер сеансов: модель асинхронного обратного вызова ...................... 13
Пример сервера, основанный на модели событий ................................... 17
Клиент сеанса NetBIOS ............................................................................... 22
Дейтаграммные операции ............................................................................. 25
Дополнительные команды NetBIOS .............................................................. 27
Проверка состояния адаптера (команда NCBASTAT) ............................ 27
Команда поиска имени (NCBFINDNAME) ............................................... 28
Сопоставление протоколов номерам LANA ............................................. 29
Перенаправитель ............................................................................................. 30
Универсальные правила именования ............................................................. 30
Поставщик нескольких UNC ......................................................................... 31
Компоненты сетевого доступа ................................................................... 31
Перенаправитель ............................................................................................ 31
Протокол SMB ................................................................................................ 32
Пример ............................................................................................................. 32
Почтовые ящики ............................................................................................. 34
Имена почтовых ящиков ............................................................................. 34
Размеры сообщений ..................................................................................... 34
Сборка приложения и коды возврата ........................................................ 35
Использование архитектуры клиент-сервер .............................................. 35
Сервер почтовых ящиков ............................................................................ 35
Клиент почтовых ящиков ........................................................................... 37
Дополнительные API-функции почтовых ящиков ...................................... 39
Особенности работы в Windows 9x ............................................................. 40
Правила наименования ............................................................................... 40
Неспособность отменить блокирующие запросы ввода-вывода ........... 40
Утечки памяти .............................................................................................. 40
Именованные каналы .................................................................................... 41
Детали реализации именованных каналов ................................................... 41
Правила именования каналов ..................................................................... 41
Режимы передачи ........................................................................................ 41
Сборка приложения и коды возврата ........................................................ 42
208
Стр.208
Простой сервер и клиент .............................................................................. 42
Детали реализации сервера ........................................................................ 42
Усовершенствованный сервер каналов ........................................................ 45
Реализация клиента ..................................................................................... 51
Другие API-вызовы ......................................................................................... 53
Сетевые протоколы ........................................................................................ 56
Интерфейс прикладного программирования Winsock ............................ 56
Характеристики протоколов ....................................................................... 56
Ориентированность на передачу сообщений ........................................... 56
Обмен данными с соединением и без него ............................................... 57
Надежность и порядок доставки сообщений ............................................ 58
Корректное завершение работы ................................................................. 58
Широковещание ........................................................................................... 58
Многоадресное вещание ............................................................................. 58
Качество обслуживания .............................................................................. 59
Фрагментарные сообщения ........................................................................ 59
Маршрутизация ........................................................................................... 59
Сетевые протоколы, поддерживаемые Win32 ........................................... 59
Сетевые протоколы в Windows CE ............................................................ 61
Работа с Winsock ........................................................................................... 61
Инициализация Winsock ............................................................................. 61
Информация о протоколе ........................................................................... 61
Сокеты Windows .......................................................................................... 63
Семейства адресов и разрешение имен ....................................................... 66
Протокол IP .................................................................................................... 66
Протоколы TCP и UDP ............................................................................... 66
Адресация ..................................................................................................... 66
Порядок байтов ............................................................................................ 67
Создание сокета ........................................................................................... 68
Разрешение имен ......................................................................................... 68
Номера портов ............................................................................................. 69
Инфракрасные сокеты .................................................................................. 70
Адресация ..................................................................................................... 70
Разрешение имен ......................................................................................... 70
Нумерация IrDA-устройств ........................................................................ 70
Создание сервера и клиента для IrSock ..................................................... 72
Опрос IAS ..................................................................................................... 72
Создание сокета ........................................................................................... 73
Протоколы IPX/SPX ....................................................................................... 73
Адресация ..................................................................................................... 74
Создание сокета ........................................................................................... 74
Привязка сокета ............................................................................................. 75
Внутренний номер сети .............................................................................. 75
Установка типа пакета ................................................................................ 76
209
Стр.209
Протоколы NetBIOS ....................................................................................... 76
Адресация ..................................................................................................... 76
Создание сокета ........................................................................................... 77
Протокол AppleTalk ....................................................................................... 77
Адресация ..................................................................................................... 78
Регистрация имени AppleTalk .................................................................... 78
Разрешение имен AppleTalk ....................................................................... 80
Создание сокета ........................................................................................... 80
Протокол ATM ................................................................................................ 81
Адресация ..................................................................................................... 81
Создание сокета ........................................................................................... 83
Привязка сокета к SAP ................................................................................ 84
Дополнительные функции Winsock 2 ............................................................ 84
Основы интерфейса Winsock ........................................................................ 85
Инициализация Winsock ................................................................................. 85
Проверка и обработка ошибок ..................................................................... 86
Протоколы с установлением соединения .................................................... 86
Серверные API-функции ............................................................................. 86
Функция bind ................................................................................................ 87
Функция listen .............................................................................................. 87
Функции accept и WSAAccept .................................................................... 87
API-функции клиента .................................................................................. 88
Функции connect и WSAConnect ................................................................ 88
Передача данных: функции send и WSASend ........................................... 89
Функция WSASendDisconnect .................................................................... 90
Функции recv и WSARecv .......................................................................... 90
Функция WSARecvDisconnect .................................................................... 91
Функция WSARecvEx ................................................................................. 91
Потоковые протоколы ................................................................................. 91
Завершение сеанса: функции shutdown и closesocket .............................. 93
Примеры ....................................................................................................... 93
Протоколы, не требующие соединения ..................................................... 101
Приемник .................................................................................................... 101
Отправитель ............................................................................................... 102
Протоколы, ориентированные на передачу сообщений ........................ 102
Пример ........................................................................................................ 102
Дополнительные функции API .................................................................... 104
Ввод-вывод в Winsock .................................................................................. 106
Поддерживаемые модели ввода-вывода ................................................. 106
Режимы работы сокетов ........................................................................... 106
Блокирующий режим ................................................................................ 106
Неблокирующий режим ............................................................................ 109
Модели управления вводом-выводом сокетов ........................................... 109
Модель select .............................................................................................. 109
210
Стр.210
Модель WSAAsyncSelect .......................................................................... 111
Модель WSAEventSelect ........................................................................... 115
Модель перекрытого ввода-вывода ......................................................... 120
Модель портов завершения ...................................................................... 126
Параметры сокета и команды управления вводом-выводом ............. 133
Параметры сокета ...................................................................................... 133
Уровень SOL_SOCKET ............................................................................. 134
Уровень параметров IPPROTO_IP ........................................................... 137
Уровень параметров IPPROTO_TCP ....................................................... 141
Функции ioctlsocket и WSAIoctl .................................................................... 141
Стандартные ioctl-команды ...................................................................... 142
Другие ioctl-команды ................................................................................ 143
Ioctl-команды для ATM ............................................................................. 147
Регистрация и разрешение имен ................................................................ 148
Модели пространства имен ........................................................................ 148
Перечень пространств имен ....................................................................... 149
Регистрация службы ................................................................................... 150
Определение класса службы .................................................................... 150
Регистрация экземпляра службы ............................................................. 153
Запрос к службе ............................................................................................ 157
Создание запроса ....................................................................................... 157
Запрос к DNS .............................................................................................. 160
Многоадресная рассылка ............................................................................ 163
Основные понятия ........................................................................................ 163
Многоадресная рассылка в сетях IP .......................................................... 165
Протокол IGMP .......................................................................................... 165
Листовые узлы IP ....................................................................................... 166
Многоадресная рассылка в сетях ATM ...................................................... 166
Листовые узлы ATM ................................................................................. 167
Корневые узлы ATM ................................................................................. 167
Многоадресная рассылка с использованием Winsock ............................... 167
Рассылка средствами Winsock 1 .............................................................. 167
Рассылка средствами Winsock 2 .............................................................. 174
Общие параметры Winsock ....................................................................... 185
Простые сокеты ............................................................................................. 187
Создание простого сокета ......................................................................... 187
Протокол ICMP ............................................................................................ 188
Пример: программа Ping ........................................................................... 188
Программа Traceroute ................................................................................ 198
Служба удаленного доступа ........................................................................ 199
Компиляция и компоновка ........................................................................... 200
Структуры данных и совместимость платформ ................................... 200
Функция RasDial ........................................................................................... 200
Синхронный режим ................................................................................... 201
211
Стр.211
Асинхронный режим ................................................................................. 202
Уведомление о состоянии ......................................................................... 205
Завершение соединения ............................................................................ 206
Литература ...................................................................................................... 207
Учебное издание
Васильчиков Владимир Васильевич
Основы разработки сетевых
Windows-приложений
Учебное пособие
Редактор, корректор А.А. Аладьева
Подписано в печать 22.03.2007 г. Формат 60х84/16.
Бумага тип. Усл. печ. л. 12,32. Уч.-изд. л. 8,12.
Тираж 100 экз. Заказ
Оригинал-макет подготовлен
в редакционно-издательском отделе ЯрГУ.
Ярославский государственный университет.
150000 Ярославль, ул. Советская, 14.
Отпечатано
ООО «Ремдер» ЛР ИД № 06151 от 26.10.2001.
г. Ярославль, пр. Октября, 94, оф. 37
тел. (4852) 73-35-03, 58-03-48, факс 58-03-49.
212
Стр.212