ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Необходимая информацияЦель работы
Практическое освоение механизма сокетов. Построение TCP-соединений для межпроцессного взаимодействия программ Клиента и Сервера в модели "Клиент-сервер".
Выполнение и защита лабораторной работы 1. Ознакомиться с заданием к лабораторной работе; 2. Ознакомиться с понятиями сокета, моделей взаимодействия между процессами на основе сокетов, структурами данных и адресацией, используемых при работе с сокетами, основными шагами при организации взаимодействия процессов в сети в режиме TCP-соединения; 3. Выбрать и изучить набор системных вызовов, обеспечивающих решение задачи; 4. Для указанного варианта составить две программы: программу - сервер и программу - клиент, реализующие требуемые действия; 5. Отладить и оттестировать составленную программу, используя инструментарий ОС; 6. Защитить лабораторную работу, ответив на контрольные вопросы.
Необходимая информация Существует две модели взаимодействия между процессами в сети: модель соединений с протоколом TCP (Transmission Control Protocol), и модель дейтаграмм с протоколом UDP (User Datagram Protocol). В данной лабораторной работе используется первая из названных моделей.
Сокеты Со́кеты (англ. socket — углубление, гнездо, разъём) — название программного интерфейса для обеспечения обмена данными между процессами. Процессы при таком обмене могут исполняться как на одной ЭВМ, так и на различных ЭВМ, связанных между собой сетью. Сокет — абстрактный объект, представляющий конечную точку соединения.
Следует различать клиентские и серверные сокеты. Клиентские сокеты грубо можно сравнить с оконечными аппаратами телефонной сети, а серверные — с коммутаторами. Клиентское приложение (например, браузер) использует только клиентские сокеты, а серверное (например, веб-сервер, которому браузер посылает запросы) — как клиентские, так и серверные сокеты.
Интерфейс сокетов впервые появился в BSD Unix. Программный интерфейс сокетов описан в стандарте POSIX.1 и в той или иной мере поддерживается всеми современными операционными системами.
Принцип работы Каждый процесс может создать слушающий сокет (серверный сокет) и привязать его к какому-нибудь порту операционной системы (в UNIX непривилегированные процессы не могут использовать порты меньше 1024). Слушающий процесс обычно находится в цикле ожидания, то есть просыпается при появлении нового соединения. При этом сохраняется возможность проверить наличие соединений на данный момент, установить тайм-аут для операции и т.д.
Каждый сокет имеет свой адрес. ОС семейства UNIX могут поддерживать много типов адресов, но обязательными являются INET-адрес и UNIX-адрес. Если привязать сокет к UNIX-адресу, то будет создан специальный файл (файл сокета) по заданному пути, через который смогут сообщаться любые локальные процессы путём чтения/записи из него (см. Доменный сокет Unix). Сокеты типа INET доступны из сети и требуют выделения номера порта.
Обычно клиент явно подсоединяется к слушателю, после чего любое чтение или запись через его файловый дескриптор будут передавать данные между ним и сервером. Общая схема работы программы - сервера 1. Ожидание подключения клиента; 2. Установка соединения с клиентом; 3. Отправка клиенту сообщения; 4. Разрыв соединения и завершение программы. Общая схема работы программы – клиента 1. Подключение к серверу; 2. Ожидание получения сообщения от сервера; 3. Отображение полученного сообщения; 4. Пользователю; 5. Разрыв соединения с сервером.
Примеры (язык Си) Программа – сервер Создание простейшего TCP-сервера состоит из следующих шагов: · Создание TCP-сокетов вызовом функции socket(). · Привязывание сокета к прослушиваемому порту вызовом функции bind(). Перед вызовом bind() программист должен объявить структуру sockaddr_in, очистить ее (при помощи memset()), затем sin_family (PF_INET или PF_INET6) и заполнить поля sin_port (прослушиваемый порт, указать в виде последовательности байтов). Преобразование short int в порядок байтов может быть выполнено при помощи вызова функции htons() (сокращение от «от хоста в сеть»). · Подготовка сокета к прослушиванию на предмет соединений (создание прослушиваемого сокета) при помощи вызова listen(). · Принятие входящих соединений через вызов accept(). Это блокирует сокет до получения входящего соединения, после чего возвращает дескриптор сокета для принятого соединения. Первоначальный дескриптор остается прослушиваемым дескриптором, а accept() может быть вызван вновь для этого сокета в любое время (пока он закрыт). · Соединение с удаленным хостом, которое может быть создано при помощи send() и recv() или write() и read(). · Итоговое закрытие каждого открытого сокета, который больше не нужен, происходит при помощи close().
Программа – клиент · Создание TCP-сокета вызовом socket(). · Соединение с сервером при помощи connect(), передача структуры sockaddr_in с sin_family с указанными PF_INET или PF_INET6, sin_port для указания порта прослушивания (в байтовом порядке), и sin_addr для указания IPv4 или IPv6 адреса прослушиваемого сервера (также в байтовом порядке). · Взаимодействие с сервером при помощи send() и recv() или write() и read(). · Завершение соединения и сброс информации при вызове close().
(*) Приведены примеры для Unix подобных систем с использованием стандартных библиотек. Подробнее о работе с сокетами в других системах можно посмотреть по ссылкам (указаны в разделе «Полезные ссылки»)
Не нашли, что искали? Воспользуйтесь поиском:
|