16
Программирование обмена данными на основе транспортных протоколов
TCP должен взаимодействовать не только с протоколами нижележащего уровня, но и с протоколами и приложениями прикладного уровня. Связь с прикладным уровнем осуществляется с помощью набора сервисных примитивов. Сервисные примитивы определены в стандарте протокола, а для прикладных программ они доступны в форме библиотек работы с сокетами.
При установлении соединения каждая из сторон выполняет некоторые операции, называемые открытием соединения. Открытие может быть пассивным или активным. Как правило, одна из сторон производит активное открытие соединения, а другая - пассивное, тогда соединение устанавливается. Оба режима подчиняются четким правилам. Пассивное соединение еще иногда называют серверным, а активное - клиентским.
При активном соединении процесс прикладного уровня передает программному обеспечению TCP на той же ЭВМ сервисный примитив запроса на установление соединения с номером сокета, после чего TCP отправляет получателю запрос на установление соединения, затем ждет ответа. После установления соединения активный процесс (клиент) может инициировать прием или передачу данных.
При пассивном соединении прикладная программа переводит программное обеспечение TCP в режим ожидания запроса на соединение от удаленной системы. Когда поступает запрос, программное обеспечение TCP осуществляет установку соединения, после чего пассивный процесс (сервер) готов принимать и передавать данные.
Программный интерфейс сокетов был разработан для ОС UNIX. Библиотека функций, поддерживающих этот интерфейс, входит в ядро всех ОС типа UNIX и Linux. Однако принципы работы с этим программным интерфейсом применимы к большинству ОС, поддерживающих TCP/IP (например, в семействе ОС и оболочек типа Windows программный интерфейс сокетов реализован в динамической библиотеке Winsock.dll).
Для протокола TCP пассивное (на стороне сервера) соединение с сокетом
приводит к выполнению следующих функций: |
|
|
o |
создание сокета и установление его типа |
(в ОС ти- |
па UNIX функция socket); |
|
|
o |
настройка сокета на конкретное соединение (указывает адрес и но- |
|
мер порта - в ОС типа UNIX - функция bind); |
|
|
o |
создание очередь клиентов (в ОС типа UNIX - функция listen); |
|
o |
ожидание приходящего запроса на соединение с сокетом (в ОС ти- |
|
па UNIX - функция accept); |
|
|
o |
прием и передача данных от клиента (в ОС |
типа UNIX - |
функции read, write, send, recv и их модификации); |
|
|
o |
закрытие соединения с клиентом (в ОС типа UNIX - функция close). |
|
Получив входящий запрос на соединение, сервер должен решать как бы две задачи одновременно: обслуживать уже установленное с клиентом соединение в соответствии с прикладным протоколом (принимать и отдавать данные
17
клиенту) и ожидать поступления новых запросов на соединение от других клиентов. Обычно в развитых ОС (а сюда подпадают все современные ОС за исключением, разве что, MS DOS) эта проблема решается за счет возможностей параллельного выполнения нескольких процессов. Сервер может породить новый процесс (или новую цепочку выполнения - thread), который и должен будет заняться обслуживанием уже установленного соединения, а сам основной процесс сервера может закрыть текущее соединение и вновь вернуться к ожиданию запросов на соединение от других клиентов. В ОС типа UNIX создание нового процесса решается с помощью функции fork, при этом за вновь созданным процессом сохраняются все соединения, сделанные в основном процессе.
Для протокола TCP активное (на стороне клиента) соединение с сокетом
приводит к выполнению следующих функций: |
|
|
|
|
||||
o |
создание |
|
сокета и |
установление |
его |
типа |
(в ОС |
ти- |
па UNIX функция socket); |
|
|
|
|
|
|||
o |
установление соединения с сервером (указывает адрес и номер пор- |
|||||||
та - в ОС типа UNIX - функция connect); |
|
|
|
|
||||
o |
прием |
и |
передача |
данных |
(в |
ОС |
типа UNIX |
- |
функции read, write, send, recv и их модификации); |
|
|
|
|
||||
o |
закрытие соединения с сервером (в ОС типа UNIX - функция close). |
|||||||
Клиент, как правило, не требует для своей работы параллельного выпол- |
||||||||
нения нескольких процессов. |
|
|
|
|
|
|||
В |
среде программирования Borland Delphi существуют специальные |
|||||||
классы, которые позволяют выполнять все те же действия, что и библиотека сокетов в ОС UNIX. Они взаимодействуют с библиотекой Winsock.dll на основе специальных технологий ОС (ActiveX технологии и COM-объекты). В среде Borland Delphi версии 3.0 для целей клиентского и серверного соединений служит класс объектов TTCP; а в среде Borland Delphi версии 5.0 для клиентского соединения существует класс объектов TClientSocket, а для серверного - TServerSocket. Естественно, пользователь может на основе базовых классов разрабатывать свои собственные классы, которые будут поддерживать соединения по определенным им самим прикладным протоколам.
Для того, чтобы создать сокет, достаточно создать экземпляр объекта выбранного класса (TTCP - в среде Borland Delphi версии 3.0 на страничке компо-
нент "Internet", TClientSocket или TServerSocket - в среде Borland Delphi версии
5.0 также на страничке компонент " Internet"). Это можно выполнить при проектировании приложения в среде разработки или же средствами языка программирования при выполнении приложения. Чтобы специфицировать (настроить) сокет необходимо созданному экземпляру объекта присвоить нужные значения в указанные свойства (properties) - как правило, это свойства с именами вида "Port" и "Host" (имена и состав свойств зависят от версии среды разработки). Это тоже можно сделать как в режиме проектирования приложения, так и командами присвоения свойств объекта в тексте программы. После этого сокет инициализирован и с ним можно работать.
Для работы сокета клиента необходимо открыть сокет (процедура Open), затем использовать процедуры установления соединения, передачи и приема
18
данных, а в конце работы закрыть сокет (процедура Close). При удалении экземпляра объекта автоматически прекратит существование и связанный с ним сокет.
Для работы сокета сервера после его создания надо вызвать процедуру ожидания соединения. При этом по установлению соединения наступит событие, которое программист должен соответствующим образом обработать. В среде Borland Delphi версии 3.0 программист сам должен создавать потоки выполнения для обслуживания соединения (для выполнения потоков служат экземпляры класса объектов TThread), а в среде Borland Delphi версии 5.0 это можно сделать в автоматическом или полуавтоматическом режиме. После окончательного завершения работы сокет сервера следует закрыть. При удалении экземпляра объекта автоматически прекратит существование и связанный с ним сокет.
Порядок выполнения работы
1.Получить вариант задания у преподавателя.
2.Разработать прикладную программу в соответствии с заданием.
3.Подготовить и защитить отчет.
4.Написать и отладить программу на ЭВМ.
5.Сдать работающую программу преподавателю.
Требования к оформлению отчета Кроме общих требований, которые можно посмотреть на
http://vmk.ugatu.ac.ru/treb.htm, отчет должен содержать следующую информацию:
o Описание алгоритма взаимодействия прикладной программы с внешним миром на основе заданного протокола.
o Перечень используемых классов, их свойств и функций ОС или среды разработки для организации протокола взаимодействия.
Основные контрольные вопросы
1.Какую роль выполняет транспортный протокол TCP в сети Internet ? Расскажите о назначении протоколов транспортного уровня.
2.Расскажите, как происходит передача сообщения в сети Internet по протоколу TCP.
3.Что такое скользящее окно ? Расскажите о принципах работы протокола TCP со скользящим окном сегментов сообщения.
4.Что такое сокет ? Какие параметры протокола TCP позволяют однозначно идентифицировать каждое соединение ?
5.На основе каких принципов выбираются номера портов для прикладных программ в сети Internet ? Перечислите номера портов наиболее употребительных прикладных служб сети.
6.Объясните, как соответствуют друг другу номера портов отправителя и получателя при соединении между двумя ЭВМ по протоколу TCP. Что такое мультиплексирование портов ?
19
7.Расскажите о принципах работы протокола передачи сообщений UDP. В чем его отличие от протокола TCP ?
8.Для каких целей служат утилиты ping и traceroute ? Расскажите о принципах их работы.
9.Что такое активное и пассивное соединение. В чем их отличие ?
10.Расскажите, какую типовую последовательность действий надо выполнить для установления пассивного соединения.
11.Расскажите, какую типовую последовательность действий надо выполнить для установления активного соединения.
12.Как реализованы функции работы с сокетами в библиотеке под ОС ти-
па UNIX ?
13.Как реализованы функции работы с сокетами в средах разработки Borland
и Microsoft ?
ТИПОВЫЕ Варианты заданий
(для разных протоколов TCP или UDP могут быть принципиальные отличия в реализации,
т.к. в первом случае устанавливается СОЕДИНЕНИЕ, а во втором - оно отсутствует)
1.Написать клиентскую и серверную программы работающие по протоколам TCP и UDP с тем учетом, что клиент будет обращаться к серверу по указанному преподавателем номеру порта, считывать требуемое количество символов и выводить их на экран локальной машины. На сервере выводить на экран сообщения о производимых действиях (подключен, передано, отключен и т.д.) с указанием IP адресов клиентов. Тестирование производить с несколькими одновременно запущенными клиентами.
2.Написать клиентскую и серверную программы работающие по протоколам TCP и UDP с тем учетом, что клиент будет обращаться к серверу по указанному преподавателем номеру порта, передавать на сервер произвольную строку, ждать отклик сервера и выводить его на экран локальной машины. На сервере выводить на экран сообщения о производимых действиях (подключен, получено, отключен и т.д.) с указанием IP адресов клиентов. Тестирование производить с несколькими одновременно запущенными клиентами.
3.Написать клиентскую и серверную программы работающие по протоколам TCP и UDP с тем учетом, что клиент будет обращаться к серверу по указанному преподавателем номеру порта, считывать информацию, содержащую время дня и текущую дату. На сервере выводить на экран сообщения о производимых действиях (подключен, передано, отключен и т.д.) с указанием IP адресов клиентов. Тестирование производить с несколькими одновременно запущенными клиентами.
4.Написать клиентскую и серверную программы работающие по протоколам TCP и UDP с тем учетом, что клиент будет обращаться к серверу по
20
указанному преподавателем номеру порта, считывать строку, взятую сервером из произвольного файла и выводить ее на экран локальной машины. На сервере выводить на экран сообщения о производимых действиях (подключен, передана строка из такого-то файла, отключен и т.д.) с указанием IP адресов клиентов. Тестирование производить с несколькими одновременно запущенными клиентами.
5.Написать клиентскую и серверную программы работающие по протоколам TCP и UDP с тем учетом, что клиент будет обращаться к серверу по указанному преподавателем номеру порта, передавать некоторе количество интерактивно введенных пользователем символов и выводить их на экран локальной машины. При получении от клиента определенной, заданной интерактивно на сервере, строки, сервер должен разрывать соединение и больше не работать с данным клиентом. На сервере выводить на экран сообщения о производимых действиях (подключен, передана строка из такого-то файла, отключен и т.д.) с указанием IP адресов клиентов. Тестирование производить с несколькими одновременно запущенными клиентами.
6.Написать клиент-серверную программу работающую по протоколам TCP и UDP с аналогичными программами по указанному преподавателем порту и реализующую простейший chat с выбираемыми собеседниками. Протокол о совершаемых действиях должен выводиться на экран.
Лабораторная работа № 3 Разработка приложений для Web-сервера
Цель работы: получение навыков установки и конфигурирования Web- сервера, разработки динамических HTML-страниц на основе PHP, ASP, JavaScript, Java, Flash и т.д.
Основа таже, что и в л.р. №2, только с разработкой Internet/Intranet приложения, а также должны быть ДОБАВЛЕНЫ: работа с БД и реализованы две части: пользовательская (для просмотра данных) и администраторская (для ввода и редоктирования данных), причем при входе на администраторскую часть должны осуществляться аутентификация и авторизация. В пользовательской части должны производиться какие-то выборки из базы данных по интерактивно зафиксированным пользователем параметрам с динамическим формированием результирующей страницы.
Замечания:
1. Детали задания, касающиеся ДОБАВЛЕННОЙ функциональности определя-
ются |
каждым |
студентом |
самостоятельно. |
|
2. В качестве примера прообраза работы с графикой |
|
|
||
|
Задание: |
|
|
|
1. |
Установить |
интегрированный |
пакет DENWER |
|
(http://www.denwer.ru/) (Последняя |
инсталяционная |
версия |
- |
|