Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Научный редактор В.П.Кулюкин




Уральский федеральный университет

Имени первого Президента России Б.Н.Ельцина

 

 

ИНТЕРФЕЙС СОКЕТОВ

 

 

Методические указания

к лабораторному практикуму по дисциплине

«Технологии программирования»

Для студентов направления 230100

«Информатика и вычислительная техника»

 

Екатеринбург

УрФУ


УДК 004.065

 

Составитель: С. С. Ваулин

Научный редактор В.П.Кулюкин

  Интерфейс сокетов:методические указания по лабораторному практикуму / сост. С.С.Ваулин. Екатеринбург: УрФУ, 2011. – 23 с.

 

 

В методических указаниях приводится информация об интерфейсе сокетов и примеры программ, реализующих сетевое взаимодействие в рамках архитектуры «клиент-сервер».

Предназначено для студентов направления 230100 «Информатика и вычислительная техника».

 

Библиогр.: 3 назв. Рис. 2. Лист. 23.

 

 

Подготовлено кафедрой

«Микропроцессорная техника»

факультета ускоренного обучения

 

  © УрФУ, 2011  

СОДЕРЖАНИЕ

 

 


ВВЕДЕНИЕ................................................................................................ 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. Взаимодействие клиента и сервера при использовании дейтаграмных сокетов.

 

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

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных