ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Научный редактор В.П.КулюкинУральский федеральный университет Имени первого Президента России Б.Н.Ельцина
ИНТЕРФЕЙС СОКЕТОВ
Методические указания к лабораторному практикуму по дисциплине «Технологии программирования» Для студентов направления 230100 «Информатика и вычислительная техника»
Екатеринбург УрФУ УДК 004.065
Составитель: С. С. Ваулин Научный редактор В.П.Кулюкин
В методических указаниях приводится информация об интерфейсе сокетов и примеры программ, реализующих сетевое взаимодействие в рамках архитектуры «клиент-сервер». Предназначено для студентов направления 230100 «Информатика и вычислительная техника».
Библиогр.: 3 назв. Рис. 2. Лист. 23.
Подготовлено кафедрой «Микропроцессорная техника» факультета ускоренного обучения
СОДЕРЖАНИЕ
ВВЕДЕНИЕ................................................................................................ 5 1. ИНТЕРФЕЙС СОКЕТОВ....................................................................... 6 1.1 Базовые понятия................................................................................ 6 1.2 Основные примитивы библиотеки сокетов.................................... 10 1.2.1. Создание сокета....................................................................... 10 1.2.2. Связывание сокета с сервисным сокет-адресом..................... 11 1.2.3. Соединение клиента c сервером.............................................. 11 1.2.4. Установка сервера в режим "прослушивания" входящих соединений 11 1.2.5. Принятие сервером запроса клиента на соединение.............. 12 1.2.6. Закрытие соединения............................................................... 12 1.2.7. Функции чтения и записи........................................................ 12 1.2.8. Вспомогательные функции...................................................... 13 1.3. Параметры сокета.......................................................................... 15 1.4. Обработка ошибок и отладка программ...................................... 16 1.5. Использование интерфейса сокетов в операционной системе MS Windows 18 2. СЕТЕВЫЕ ПРОГРАММЫ В АРХИТЕКТУРЕ «КЛИЕНТ-СЕРВЕР» 20 СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ...................................... 23
ВВЕДЕНИЕ Разработка сетевых программ в рамках архитектуры «клиент-сервер» требует организации взаимодействия процессов, выполняющих роли клиента и сервера. Как и любое межпроцессное взаимодействие, такой обмен данными может осуществляться только средствами ядра операционной системы с помощью соответствующих системных вызовов. Базовым программным интерфейсом для этого является интерфейс сокетов, который и рассматривается в данных методических указаниях. В рамках лабораторного практикума студенты разрабатывают сетевые программы. Самостоятельное создание таких программ позволяет детально разобраться в механизмах сетевого взаимодействия. ИНТЕРФЕЙС СОКЕТОВ
Стандартным (POSIX и ISO) сетевым программным интерфейсом операционных систем является интерфейс сокетов. Впервые он появился в BSD UNIX 4.2 - первой версией системы UNIX, в которой реализация стека TCP/IP была включена в состав ядра операционной системы и в которой одновременно был предложен программный интерфейс для работы с ним. Термин "сокет" (socket) обозначает одновременно библиотеку сетевых интерфейсов и оконечное устройство канала связи (точку связи), через которое процесс может передавать или получать данные. Эта точка связи идентифицируется дескриптором сокета - целым значением, аналогичным дескриптору файла. Примитивы интерфейса сокетов максимально приближены к примитивам файлового интерфейса. Они позволяют управлять обменом данными между процессами, выполняющимися в одной или в различных системах. Библиотека сокетов, таким образом, маскирует интерфейс и механизмы транспортного уровня, один сокет-вызов может преобразовываться в несколько транспортных запросов. В системах семейства UNIX функции сокетов представляют собой системные вызовы, обращающиеся с помощью аппарата прерываний к сервису ядра операционной системы. В других системах (например, Microsoft Windows) они представляют собой надстройку над сервисами ядра, и для использования требуют динамического подключения соответствующей библиотеки.
Базовые понятия
При создании сокета задается идентификатор области (domain), определяющей используемый для взаимодействия стек протоколов. Наиболее часто используются следующие области: · PF_LOCAL, PF_UNIX, PF_FILE – локальное взаимодействие прпоцессов внутри одной системы. · PF_INET - TCP/IP ver. 4. · PF_INET6 - TCP/IP ver. 6. · PF_IPX - SPX/IPX. · PF_PACKET - пакетная область, позволяет работать непосредственно с пакетами вплоть до канального уровня. Префикс у символических констант означает Protocol Family, поддерживаются и устаревшие константы с префиксом AF – Address Family. Кроме того, задается тип сокета, определяющий свойства формируемого коммуникационного канала: · SOCK_DGRAM: сообщения посылаются в форме дейтаграмм. Связанный с ним протокол нe является надежным (нарушается последовательность, возможны потери данных), логическое соединение не устанавливается. В области PF_INET используется протокол UDP. · SOCK_STREAM: устанавливается логическое соединение, по которому посылаются потоки октетов. Используется надежный протокол с установлением виртуального соединения. В области PF_INET используется протокол TCP. · SOCK_RAW: обеспечивается доступ к пакетам сетевого уровня. · SOCK_PACKET: обеспечивается доступ к пакетам канального уровня. Для дейтаграмных сокетов размер передаваемых за одну операцию данных ограничен. Сокет-интерфейс можно использовать для связи между двумя процессами в одной системе. В этом случае необходимо указать, что работа производится в области PF_UNIX. Вызовы сокетов для области PF_UNIX те же, что и для области PF_INET; меняются только структуры, связанные с адресами. Данное сходство вызовов позволяет достаточно легко переходить от локальных задач к сетевым и обратно. Адресация удаленного процесса осуществляется с помощью так называемого сокет-адреса, представляющего собой структуру, формат которой зависит от используемой области. Общая структура сокет-адреса определена в файле <sys/socket.h>:
struct sockaddr { u_short sa_family; /*PF_UNIX, PF_INET либо другая область*/ char sa_data [14]; /*абсолютный адрес протокола*/ };
Адрес представляет собой сочетание идентификатора области и некоторого адреса, идентифицирующего удаленный процесс в используемом стеке протоколов. Определение сокет-адреса уточняется для каждой области. Структура сокет-адреса в области TCP/IP описана в файле <netinet/in.h>. Там определены следующие структуры:
struct sockaddr_in { short sin_family; /*PF_INET*/ u_short sin_port; /*номер порта*/ struct in_addr sin_addr; /*IP адрес хоста*/ char sin_zero [8]; /*не использован*/ }; struct in_addr { u_long s_addr; };
Сокет-адрес представляет собой сочетание идентификатора области, IP адреса хоста и номера порта, адресующего выполняющийся на этом хосте процесс. Поле заполнения дополняет структуру адреса до длины адреса в общем виде. Структура сокет-адреса в локальной области описана в файле <sys/un.h>:
struct sockaddr_un { short sun_family; /*PF_UNIX*/ char sun_path [108]; /*полное имя файла*/ };
Адрес представляет собой сочетание идентификатора области и пути к специальному файлу типа сокет (связанного с очередью в адресном пространстве ядра ОС), который и используется для взаимодействия процессов. Использование библиотеки сокетов в режиме с установлением виртуального соединения в рамках архитектуры “клиент-сервер” иллюстрируется рис. 1.
Рисунок 1. Взаимодействие клиента и сервера при использовании потоковых сокетов.
Клиент: - создает сокет; - подсоединяется к серверу, предоставляя адрес удаленного сокета (IP адрес сервера и номер сервисного порта). Это соединение автоматически присваивает клиенту номер порта; - осуществляет считывание или запись на сокет; - закрывает сокет. Сервер: - создает сокет; - связывает("binding") сокет-адрес (IP адрес и номер порта) с сервисной программой; - переводит себя в состояние "прослушивания" (“listen”) входящих соединений; - для каждого входящего соединения: - принимает соединение (создается новый сокет с теми же характеристиками, что и исходный; - считывает и записывает на новый сокет; - закрывает новый сокет.
Действия клиента и сервера существенно различаются, они ассиметричны. Создание нового сокета при приеме соединения позволяет реализовать параллельный сервер. Примитивы, которые могут блокироваться, помечены двойными линиями. Установление и прием соединения блокируются, пока сервер не ответит клиенту, и пока к серверу не обратится клиент. Считывание с сокета блокируется до тех пор, пока в приемном буфере ничего нет (если сокет объявлен неблокирующим, операция чтения возвращает сообщение об ошибке). Сразу же после получения, данные пересылаются в прикладную программу (даже если число полученных байтов меньше заданного). Запись в сокет блокируется в том случае,если буфер передачи переполнен (если сокет объявлен неблокирующим, операция записи возвращает сообщение об ошибке). Байты, хранящиеся в буфере, не пересылаются в сеть до тех пор пока буфер не переполнится. Можно осуществить запись и чтение срочных данных ("out of band data"), они передаются и принимаются вне обычного потока. Действия клиента и сервера при использовании дейтаграммных сокетов гораздо более симметричны и показаны на рис. 2. Здесь связывание сокета клиента с сокет-адресом требуется только тогда, когда клиенту надо получать данные с сервера. Соответствующие примитивы выделены точечными линиями. Виртуальное соединение между клиентом и сервером не устанавливается, поэтому закрывать его нет необходимости. Примитив close() может быть использован, если работа с данным сокетом более не требуется.
Рисунок 2. Взаимодействие клиента и сервера при использовании дейтаграмных сокетов.
Операции чтения и записи здесь осуществляются с помощью другого набора функций, позволяющих задать при передаче и восстановить при приеме сокет-адрес удаленного процесса. Блокироваться может только функция чтения при отсутствия принимаемых данных.
Не нашли, что искали? Воспользуйтесь поиском:
|