Програмна реалізація системи IP-телебачення на базі архітектури "клієнт-сервер"

ПРОГРАМНАРЕАЛІЗАЦІЯ СИСТЕМИ IP-ТЕЛЕБАЧЕННЯ НА БАЗІ АРХІТЕКТУРИ “КЛІЄНТ-СЕРВЕР”

Архітектура “клієнт-сервер”
Термін “клієнт-сервер” означає такуархітектуру програмного комплексу, в якій його функціональні частинивзаємодіють по схемі “запит-відповідь”. Якщо розглянути дві взаємодіючі частиницього комплексу, то одна з них (клієнт) виконує активну функцію, тобто ініціюєзапити, а інша (сервер) пасивно на них відповідає.
Переваги архітектури “клієнт-сервер”:
швидкодія – основний фактор доцільностірозробки систем для архітектури “клієнт-сервер”. Застосування засобів швидкоїрозробки програм RAD, таких, як Delphi компанії Borland, PowerBuilder фірмиPowerSoft і Visual Basic корпорації Microsoft, дозволяє розробникам швидко іефективно створювати прикладні системи для архітектури “клієнт-сервер”;
архітектура “клієнт-сервер” – це технологія,що надає більше самостійності користувачам. Прикладні програми і дані знаходятьсяна доступних системах.
привабливість графічного інтерфейсукористувача (ГІП).
Клієнт-серверна інформаційна системаскладається в найпростішому випадку з трьох основних компонентів:
сервер. Керівник зберіганням даних, доступомі захистом, резервним копіюванням, відстежує цілісність даних відповідно до бизнес-правилі, найголовніше, виконує запити клієнта;
клієнт. Надає інтерфейс користувача, виконуєлогіку прикладних програм, перевіряє допустимість даних, посилає запити досервера і одержує відповіді від нього;
мережа і комунікаційне програмне забезпечення.Здійснює взаємодію між клієнтом і сервером за допомогою мережевих протоколів.

Програмні засоби розробки систем“клієнт-сервер”
Призначення будь-якого інструменту длярозробки систем “клієнт-сервер” – прискорити і спростити процес їх створення.За допомогою засобів швидкої розробки прикладних програм можна створюватипрограми з вбудованими засобами зв’язку з будь-яким числом серверів.
На цьому швидкорослому ринку конкуруютьсотні інструментальних комплектів для архітектури клієнт-сервер. Ряд кращихзасобів Microsoft Windows представлені пакетами Delphi Client/Server Suiteкомпанії Borland, Enterprise Developer фірми Symantec, PowerBuilder компаніїPowerSoft, SQLWindows 5 фірм Gupta і Visual Basic корпорації Microsoft.
У кожному інструментальному комплектівикористовується власний підхід, але більшість з них володіє однаковим наборомосновних функцій: проміжне забезпечення, можливість конструювання баз даних,репозиторій (сховище), можливості об’єктно-орієнтованої розробки, конструкториГІП, мова програмування високого рівня і механізми розподілу прикладнихпрограм. Порівняльна характеристика програмних засобів розробки систем “клієнт-сервер”наведена в таблиці 1.
Для програмної реалізації прикладнихпрограм, що демонструють основні можливості IP-телебачення побудованих на базіархітектури “клієнт-сервер” використана об’єктно-орієнтована мова програмуванняDelphi компанії Borland. В порівнянні з іншими засобами розробки Delphi має рядпереваг. У Delphi вдало поєднуються засоби візуального проектування іоптимізуючий компілятор, чого не можна сказати про інші системи RAD. Наявністьв системі компілятора і генерування нею машинного коду ще не означає, щоотримуваний код є оптимальним. Такі системи, як PowerBuilder і Visual Basic,спочатку створювалися на основі концепції генерації псевдокоду. При виконанніприкладних програм, створених за допомогою цих систем, отриманий псевдокодінтерпретувався.

Таблиця 1. Порівняльна характеристикапрограмних засобів розробки систем “клієнт-сервер”Найменування Коротка характеристика Delphi Client/Server Універсальний пакет для розробки клієнт-серверних прикладних програм. Забезпечує об’єктно-орієнтовану розробку з використанням візуальних засобів. Підтримує групову роботу над програмою. CA-OpenROAD Повнофункціональне об’єктно-орієнтоване середовище для розробки прикладних програм на основі мови четвертого покоління 4GL Magic 6.0 Таблично-керований інструментарій для розробки трирівневих прикладних програм “клієнт-сервер” MS Visual Basic 5.0 Універсальний пакет розробки користувальницьких прикладних програм. Забезпечує візуальну побудову форм і компіляцію програми. У повному об’ємі підтримуються OLE 2.0 і OLE Automation. Для роботи з даними призначений візуальний інструментарій Visual Database Tools PowerBuilder 4.0 Об’єктно-орієнтований засіб розробки прикладних програм “клієнт-сервер”. Має могутні візуальні засоби; підтримує стандарти OLE і ODBC Progress 8 Пакет підтримує компонентну об’єктно-орієнтовану розробку прикладних програм. Використовується нова технологія SmartObject і середовище компонентів програми (ACE) SAS System Забезпечує інструментарій для доступу, управління, аналізу і представлення даних в прикладній програмі для величезного числа систем і комп’ютерних платформ, включаючи мейнфрейми. Має 35 видів інтерфейсу для різних систем і мову програмування четвертого покоління. Підтримує ODBC Uniface Six Незалежне середовище розробки. Підтримує управління на рівні моделі і компонентне програмування. Має могутні візуальні засоби. Допускає групову розробку. Має інтерфейс до більш ніж 30 серверам БД на різних платформах
З виходом Delphi як компанія Microsoft, такі компанія Powersoft, спробували впровадити в свої продукти повноціннікомпілятори. Проте проблема полягає в тому, що ні мова Visual Basic, ні моваPowerScript не призначалися для компіляції, тому перетворення їх в машинний кодвиявилося достатньо важким завданням.
Якщо порівняти вищезазначені мови з ObjectPascal, що використовується в системі Delphi, то відмінність видно відразу.Object Pascal завжди був компільованою мовою, і при його розробці булидотримані всі вимоги, виконання яких обов’язково при компіляції і оптимізації.Підсумок вищесказаного такий: Delphi є кращим повноцінним засобом промисловоїрозробки систем “клієнт-сервер”, що володіє безліччю достоїнств, завдяки якимDelphi можна виділити з ряду інших засобів розробки. Серед них:
обширна бібліотека класів;
швидкий оптимізуючий компілятор, що генеруємашинний код;
вбудований відладчик;
простий в освоєнні механізм доступу до базданих ;
могутнє і зручне в роботі середовищерозробки.
Інструментальні засоби компанії BorlandDelphi надають широкі можливості розробки професійних прикладних програм вархітектурі «клієнт-сервер», включаючи розподілені системи і додаткидля Internet.
Програмна реалізація
Розроблені прикладні програми “Server” і“Client” демонструють приклад роботи класичної дволанкової архітектури“клієнт-сервер”, інтерфейсні оболонки яких представлені на рис.1 і рис. 2
Елементи, з яких конструюється видимезображення, що створюється працюючою програмою, називаються компонентами. Вякості інтерфейсного елемента і, в той же час контейнера для всіх видівкомпонентів виступає форма. Поєднання таких можливостей витікає з приналежностіформи до класу TWinControl, що дозволяє формі бути оболонкою навколо віконногокомпоненту Windows, і відповідно, до класу TComponent, від якого успадковуєтьсяTWinControl, завдяки чому форма може бути власником компонентів. Коженкомпонент, розташований на формі, є деяким класом – спадкоємець класуTComponent, який є базовим для створення компонентів. Прямі спадкоємці цьогокласу не мають візуального представлення і являються, відповідно,невізуальними. До таких компонентів відносяться: IdUDPServer, ServerSocket,ClientSocket.

/>
Рис. 1. Інтерфейсна оболонка прикладноїпрограми “Server”
/>
Рис. 2. Інтерфейсна оболонка прикладноїпрограми “ Client ”

Компоненти, які мають візуальнепредставлення в процесі виконання програми і її проектування, успадковані віднащадка TComponent, класу TControl, і називаються візуальними. До такихкомпонентів відносяться: Button, SpeedButton, LabeledEdit, Edit, Label,GroupBox, FileListBox, ProgressBar, PageControl, TabSheet, Panel, MediaPlayer,Bevel.
Так само існує третій вид компонентів, якіспочатку не видно користувачеві, але можуть з’являтися на екрані в окремихвікнах у разі потреби – це діалоги. Діалоги є спадкоємцями класу TComponentчерез спеціалізований клас TCommonDialog. Клас TCommonDialog серед іншихметодів додає до класу TComponent метод Execute, який є абстрактним іперевизначається конкретними компонентами-діалогами для виведення діалоговоговікна на екран. Серед такого роду компонентів в програмі “Server” присутнійдіалог відкриття файлів OpenDialog. Призначення всіх використаних в прикладнихпрограм “Server” і “Client” компонентів наведені в додатку А.
Кожна програма складається з файлу проекту(файл з розширенням dpr) і файлу модуля (файл з розширенням pas).
Структура проекту
Проект – це контейнер верхнього рівня, вякому зберігаються всі об’єкти прикладнщї програми. Його призначення полягає взабезпеченні взаємозв’язку файлів з яких складається програма.
Файл проекту є програмою, написаною на мовіObject Pascal і призначеною для обробки компілятором. Ця програма автоматичностворюється Delphi і містить лише декілька рядків, які приведені в лістингу Б.1додатку Б .
У тексті кода жирним шрифтом виділяються такзвані зарезервовані слова, а курсивом – коментарі. Текст програми починаєтьсязарезервованим словом program і закінчується словом end з крапкою за ним.Поєднання end з наступною за нею крапкою називається термінатором програмноїодиниці: як тільки в тексті програми зустрінеться такий термінатор, компіляторприпиняє аналіз програми і ігнорує частину тексту, що залишилася.
Зарезервовані слова грають важливу роль вObject Pascal, додаючи програмі в цілому властивість тексту, написаного намайже природній англійській мові. Кожне зарезервоване слово несе в собі умовнеповідомлення для компілятора, який аналізує текст програми.
Коментарі, навпаки, нічого не означають длякомпілятора, і він їх ігнорує. Коментарі важливі для програміста, який з їхдопомогою пояснює ті або інші місця програми. Наявність коментарів в текстіпрограми робить її зрозуміліше і дозволяє легко пригадати особливостіреалізації програми, яка була написана кілька років тому. У Object Pascalкоментарем вважається будь-яка послідовність символів, поміщена у фігурнідужки. Так само символи // указують компілятору, що коментар розташовується заними і продовжується до кінця поточного рядка.
Слово Program з наступним за ним ім’ямпрограми і крапкою з комою утворюють заголовок програми. За заголовком слідуєрозділ описів, в якому описуються використовувані в програмі ідентифікатори.Ідентифікатори позначають елементи програми, такі як типи, змінні, процедури, функції.За допомогою речення, яке починається зарезервованим словом uses, програмістповідомляє компілятор про ті фрагменти програми (модулі), які необхіднорозглядати як невід’ємні складові частини програми і які розташовуються в іншихфайлах.
Рядок “Forms, MainUnit in ‘MainUnit.pas'{MainForm};” вказує, що крім файлу проекту в програмі повинні використовуватисямодулі Forms і MainUnit. Модуль Forms є стандартним. Призначення цього модуля полягаєу визначенні характеристик форми в додатку. Модуль MainUnit є новим, ранішеневідомим, і Delphi в цьому випадку вказує також ім’я файлу з текстом модуля (in’MainUnit.pas’) і ім’я пов’язаного з модулем файлу опису форми {MainForm}.
Директива {$R *.res} – вказівка компіляторуна необхідність підключення до програми так званого файлу ресурсів.
Власне тіло програми починається із словаbegin і обмежується термінатором end з крапкою. Тіло складається з декількохоператорів мови Object Pascal. В кожному операторі реалізується деяка дія –зміна значення змінної, аналіз результату обчислення, звернення до підпрограмиі тому подібне. В тілі даної програми три виконувані оператори. Кожен з нихреалізує звернення до одного з методів об’єкту Application. Об’єктомназивається спеціальним чином оформлений фрагмент програми, що містить в собідані і підпрограми для їх обробки. Дані називаються полями об’єкту, апідпрограми – його методами. Об’єкт в цілому призначений для вирішенняякого-небудь конкретного завдання і сприймається в програмі як неподільне ціле.Об’єкти грають надзвичайно важливу роль в сучасних мовах програмування. Вонипридумані для того, щоб збільшити продуктивність праці програміста і одночаснопідвищити якість програм, що розробляються ним. Дві головні властивості об’єкту– функціональність і неподільність – роблять його самостійною частиною програмиі дозволяють легко переносити об’єкт з однієї програми в іншу. В об’єктіApplication зібрані дані і підпрограми, необхідні для нормального функціонуванняWindows-програми в цілому. Delphi автоматично створює об’єкт-програмуApplication для кожного нового проекту.
Рядок “Application.Initialize;” означаєзвернення до методу Initialize об’єкту Application. Прочитавши цей рядок,компілятор створить код, який змусить процесор перейти до виконання деякогофрагмента програми, написаного розробниками Delphi. Після виконання цьогофрагмента управління процесором перейде до наступного рядка програми, в якійвикликається метод CreateForm.
Оператор Application.CreateForm призначенийдля завантаження форми в пам’ять.
Викликом методу Run об’єкту Applicationпочинається власне робота пркладної програми. Цей метод запускає цикл обробкиповідомлення, на якому побудована робота програми, що завершується під часнадходження повідомлення про закриття.
Структура модуля
Модулі – це програмні одиниці, призначенідля розміщень фрагментів програм. За допомогою програмного коду, що міститься вних, реалізується вся поведінкова сторона програми. Будь-який модуль маєнаступну структуру: заголовок, секція інтерфейсних оголошень, секціяреалізації, термінатор. Заголовок відкривається зарезервованим словом unit заяким слідує ім’я модуля і крапка з комою. Секція інтерфейсних оголошеньвідкривається зарезервованим словом Interface, а секція реалізації – словомimplementation. Розділення модуля на дві секції забезпечує зручний механізмобміну алгоритмами між окремими частинами однієї програми. Термінатором модуля,як і термінатором програми, є end з крапкою. Вихідний текст програмних модулівприведений в лістингах Б.2 та Б.3 додатку Б.
У інтерфейсному розділі (interface)приводиться інформація про вміст програмного модуля, доступний для іншихмодулів і програм. Такою інформацією оголошені функції і процедури, визначенізмінні, константи і типи.
Розділ реалізації (implementation) міститьвласне програмний код модуля. Всі оператори, поміщені в розділ реалізації,доступні тільки усередині даного програмного модуля. Для того, щоб дістатидоступ до тих або інших елементів ззовні модуля, необхідно помістити відповідніоголошення в інтерфейсний розділ цього модуля. Типовим випадком організаціїпрограмного модуля є розміщення оголошення функції в розділі interface, аоператорів цієї функції – в розділі implementation.
В операторі uses перераховуються модуліObject Pascal, які система Delphi повинна скомпоновати з даною програмою пристворенні виконавчого файлу.
Зарезервоване слово type сповіщає компіляторпро початок розділу опису типів. Будь-які дані, тобто константи, змінні,властивості, значення функцій або виразу, в Object Pascal характеризуютьсясвоїми типами. Тип визначає безліч допустимих значень, які може мати той абоінший об’єкт, а також безліч допустимих операцій, які застосовні до нього. Крімтого, тип визначає також і формат внутрішнього представлення даних в пам’ятіПК.
Секції private і public визначають областівидимості елементів опису класу. Класами в Object Pascal називаються спеціальнітипи, які містять поля, методи і властивості. Секція public не накладаєобмежень на область видимості перераховуваних в ній полів, методів івластивостей – їх можна викликати в будь-якому іншому модулі програми. Секціяprivate звужує область видимості до мінімуму: закриті елементи опису доступнітільки усередині методів даного класу і підпрограмах, що знаходяться в тому жмодулі, де описаний клас. Елемент, оголошений в секції private, стаєнедоступним навіть найближчим нащадкам класу, якщо вони розміщуються в іншихмодулях.
Далі слідують автоматично створені заготовкиDelphi для обробників подій.
Під ключовим словом implementation проектузнаходиться так звана директива $R. Вона повідомляє компілятор, що в проектпотрібно включити ресурс Windows, вказаний в тексті директиви. Символ зірочки(*), використаний як ім’я файлу, означає, що ім’я файлу ресурсу співпадає зім’ям файлу проекту. Файл (.dfm) містить бінарне уявлення створеною задопомогою Form Designer форми.
Зарезервоване слово var визначає розділоголошення змінних інтерфейсної секції.

Принцип роботи прикладних програм
При запуску програми “Server” на екраніадміністратора з’являється вікно представлене на рис.3.1. Програма-сервер(сервер) переходить в режим прослуховування. При запуску програми “Client” наекрані користувача з’являється вкладка “Interactive” вікна, що представлене нарис. 3.2. Програма-клієнт (клієнт) автоматично встановлює зв’язок з сервером.Для приймання списку доступних відеофайлів, клієнт посилає запит серверу, щосупроводжується натисненням користувача кнопки “Send list request”. Післяотримання запиту від клієнта, сервер автоматично посилає список доступних відеофайлів,який вказаний на панелі “Archive file content”. Отриманий список відображаєтьсяна панелі “Available files list” клієнта. Вибраний користувачем файлпоміщається в рядок вводу “Chosen file”. Для отримання вказаного файлу, клієнтпосилає запит на сервер, що супроводжується натисненням користувача кнопки“Send videofile request”. Отримана назва файлу запиту від клієнта поміщається врядок вводу “Request file” на сервері. Затвердивши запит, адміністратор натискаєкнопку “Adopt”, після чого назва файлу відображається в рядку вводу “Send file”.Адміністратор може вручну вибрати файл, натиснувши кнопку “…”. Відправкафайлу здійснюється після натиснення кнопки “Send”. Параметри передачі файлувідображаються на панелі угрупування компонентів “Send file parameters”.Користувач проглядає отриманий файл на відеопрогравачі, розміщеному на вкладці“Video player”, за допомогою кнопок управління “Play”,”Pause” і “Stop”.
Аналіз програмного коду
Початковий текст програмного коду прикладноїпрограми “Server” приведений в розділі implementation, в лістингу Б.2 додатку Б.Початковий текст програмного коду програми “Client” приведений в розділіimplementation, в лістингу Б.3 додатку Б.
Механізм взаємодії клієнта і сервера в Delphiзаснований на використанні сокетного з’єднання і подальшого обміну даними.Сокетом (socket) називається спеціальний об’єкт, що створюється для відправки іотримання даних через мережу. Цей об’єкт створюється усередині бібліотекисокетів і володіє двома основними характеристиками: протоколом і адресою, дояких він прив’язаний. Формат адреси сокета визначається конкретним протоколом.Зокрема, для протоколів TCP і UDP адреса складається з IP-адреса мережевогоінтерфейсу і номера порту.
У першій частині програми, коли між серверомі клієнтом відбувається обмін текстовими даними, комунікація реалізована через стекпротоколів TCP/IP.
Перед тим, як передавати дані по протоколуTCP, необхідно встановити зв’язок між двома комп’ютерами. Комп’ютер, якийініціалізує цей зв’язок, називається клієнтом, а комп’ютер, який повиненвідгукнутися на ініціалізацію зв’язку для обміну даними, – сервером. Відповіднокомпоненти Delphi, які забезпечують комунікацію по протоколу TCP, розбиті надві групи – клієнтські (ClientSocket) і серверні (ServerSocket). IP-адреса іномери портів вказані у відповідних властивостях компонентів, що приведені вдодатку В.
При запуску програми “Server” відбуваєтьсявиконання процедури: “procedure TMainForm.FormCreate(Sender: TObject);”. Рядок“ServerSocket1.Active:=true;” свідчить про активізацію серверного сокета 1(ServerSocket1), який переходить в режим прослуховування, точніше – очікуваннязапиту від клієнта. Не маючи методів ініціалізації зв’язку, сервер постійноопитує відповідний порт на предмет появи запиту від клієнта. Зміна властивостіActive компоненту ServerSocket стартує або припиняє опит порту, зазаченого вйого властивості Port.
Активізація клієнтського сокета 1(ClientSocket1) відбувається по натисненню користувачем прграми “Client” кнопки“Send list request”. Компонент ClientSocket1 з’єднується з сервером, адресаякого вказана у властивості Address, і через порт, вказаний у властивості Port.Після успішного встановлення зв’язку з сервером можна почати обмін даними міжклієнтом і сервером. У клієнтській прикладній програмі буде викликано подію OnConnect.Обробником даної події є процедура: “procedure TMainForm. ClientSocket1Connect(Sender:TObject; Socket: TCustomWinSocket);”. Тіло процедури складається з рядка“Socket.SendText(‘s’);”, виконання якої приводить до відправки змінної ‘s’рядкового типу методом SendText. Змінна ‘s’ є запитом для отримання від серверасписку доступних відеофайлів.
На приймальній стороні, по прийняттю даних відклієнта, виконується подія OnClientRead серверного сокета 1, обробником якої єпроцедура: “procedure TMainForm.ServerSocket1ClientRead(Sender: TObject;Socket: TCustomWinSocket);”. Тіло процедури починається аналізом команди, щоприйшла, від клієнта. Якщо це буква ‘s’, означає клієнт просить прислати йомуфайл. Але перш ніж посилати дані, файл потрібно відкрити і завантажити. Дляцього використовується об’єкт файлового потоку (змінна fs типу TFileStream).Спочатку ця змінна ініціалізується: “fs:=TFileStream.Create(‘output.txt’,fmOpenRead);”. Як параметри конструктора передається ім’я файлу і режим, вякому буде підключений файл. Текстовий файл з ім’ям “output.txt” містить списокдоступних клієнтові відеофайлів. Прапор fmOpenRead визначає режим читанняфайлу. Після відкриття поточна позиція у файлі встановлюється в початок:“fs.Position:=0;”.
Для коректного прийому файлу на клієнтськійстороні, в першу чергу відправляється розмір файлу за допомогою методу SendText:“Socket.SendText (‘Size:’+IntToStr(fs.Size) + #0);”. На початку даних, що відправляються,стоїть слово “size:”, по якому клієнт дізнається, що висланий розмір файлу.Після цього йде сам розмір, перетворений в рядок. В самому кінці рядкудодається нульовий символ #0, по якому клієнт зможе відокремити цю інформаціювід даних самого файлу. Далі відправляється вибраний файл за допомогою методу Sendstreamкомпонента Socket: “ Socket.SendStream(fs);”.
Обробником події OnRead компонента“ClientSocket1”, є процедура прийняття клієнтом висланого сервером файла: “procedureTMainForm.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);”.Умовно процедура розділена на дві частини. На самому початку зберігаєтьсяприйнятий текст в змінній s: “s:= Socket.ReceiveText;”. Наступний шматок кодувиконуватиметься, якщо змінна Reciving рівна true. Далі необхіднопроаналізувати другу частину процедури.
Тут відбувається перевірка: якщо перші п’ятьсимволів тексту, що прийшов, рівні слову “size:”, означає, що отриманий розмірфайлу і повинен початися його прийом. Спочатку вирізається розмір ізберігається в текстовій змінній. Для цього копіюються з тексту, що прийшов,всі символи від шостого (після слова “size:”) і до символу #0: “sl:= copy( s,6, Pos(#0, s ) — 6 ) ;”. Наступним рядком відбувається перетворення текстового представленнярозміру в число і збереження його в змінній DataSize. Далі з тексту, щоприйшов, видаляються всі символи до першого нульового символу #0, тобто видаляютьсяінформація про розмір передаваного файлу. Змінна Reciving встановлюється рівноюtrue. Ця змінна говорить про те, що почалася передача файлу. Дані приймаютьсяпакетами розміром приблизно по 8 Кбайт. Щоб зберегти їх у файл, створюєтьсяфайловий потік: “fs:=TFileStream.Create(‘output.txt’,fmCreate);”. Як ім’яуказується “output.txt”. Як прапор при відкритті файлу вказаний fmCreate, щопримушує створити новий файл. Якщо такий файл вже існує, то він будеперезаписаний. Тепер необхідно повернутися до першої частини процедури.
Початок відбувається з перевірки: якщозмінна Reciving рівна true, значить, відбувається прийом даних, і отриманийчерговий пакет файлу. Він зберігається тим же способом. Після цьоговідбувається порівняння: якщо розмір потоку рівний отриманому розміру файлу, тофайл прийнятий повністю, і можна його закривати, вимикати змінну Reciving івиводити повідомлення про вдалий прийом. Отримані дані відображаються на панелі“Available files list ”: “FileListBox1.Items.LoadFromFile(‘Output.txt’);”.Властивості використаних в програмі “Client” компонентів наведені в додатку Г.
Назва вибраного користувачем файлупоміщається в рядок введення “Chosen file” і відправляється на сервернатисненням кнопки “Send videofile request” (рис. 3). Обробником події длянатиснення даної кнопки є процедура: “procedure TMainForm.Button3Click(Sender:TObject);”. У тілі процедури використаний метод SendText для відправки запитуклієнтським сокетом 2 (ClientSocket2), який активізувався при запуску програми“Client” процедурою: “procedure TMainForm.FormCreate(Sender: TObject);”.
Активізований при запуску програми сервернийсокет 2 (ServerSocket2), приймає запит і поміщає дані в рядок вводу “Requestfile”. Це відбувається по виконанню обробника події OnClientRead компонентуServerSocket2: “procedure TMainForm. ServerSocket2ClientRead(Sender: TObject;Socket: TCustomWinSocket);”. Властивості використаних в програмі “Server”компонентів наведені в додатку Д.
/>
Рис. 3. Формування запиту клієнтом
Затвердивши запит, адміністратор натискаєкнопку “Adopt”, після чого назва файлу відображається в рядку вводу “Sendfile”. Перед відправленням файл відкривається і завантажується у файловий потікініціалізацією змінної fs типу TfileStream: “procedureTMainForm.Button1Click(Sender: TObject);”.
Унаслідок того, що протокол IP не підтримуєширокомовну розсилку при використанні TCP, подальший процес передачі і прийомувідеофайлу здійснюється за допомогою протоколу UDP. Програмно даний процесреалізований за допомогою Internet Direct (Indy) компонентів, що підтримуютьнизькорівневу роботу як з сокетами, так і з найбільш загальними протоколамиІнтернету. За основу узятий компонент IdUDPServer, який використовуються дляпідтримки мережевого протоколу UDP.
Активізований при запуску програми “Server”компонент IdUDPServer починає процес передачі відеофайлу при натисненніадміністратором кнопки “Send” (рис. 4).
/>
Рис.4. Процес відправлення відеофайлу
Обробником події на натиснення кнопки єпроцедура: “procedure TMainForm.SendBtnClick(Sender: TObject);”, яка перевіряєіснування вказаного файлу. У разі позитивного результату перевірки, файлвідкривається і завантажується в потік. Подальше управління передачею файлууказується процедурі: “procedure SendProcedure(FStream: TFileStream; UDPServer:TIdUDPServer; StatusLabel :Tlabel; ProgressBar :TProgressBar);”. КомпонентIdUDPServer в першу чергу посилає значення кількості пакетів файлу, щовідправляються, за допомогою методу Send. Далі запускається цикл передачі файлуUDP пакетами розміром приблизно по 40 Кбайт за допомогою методу Send Bufferкомпоненту IdUDPServer.
Кожен пакет, відправлений за допомогою UDP,складає одну дейтаграму. Отримані дейтаграми складаються в буфер приймаючогосокета і можуть бути отримані тільки роздільно: за одну операцію читання збуфера програма, що використовує сокет, може отримати тільки одну дейтаграму.Якщо в буфері лежить декілька дейтаграм, буде потрібно декілька операційчитання, щоб прочитати все. Крім того, одну дейтаграму не можна отримати збуфера по частинах: вона повинна бути прочитана цілком за одну операцію. ПрийомUDP пакетів на користувальницькій стороні забезпечує клієнтський компонентIdUDPServer.
При активації, клієнтський IdUDPServerстворює слухаючий потік для вхідних пакетів UDP. Для кожного прийнятого пакетуUDP IdUDPServer збуджує подію OnUDPRead в головному кодовому потоці. Обробникомданої події є процедура: “procedure TMainForm.UDPServerUDPRead(Sender: TObject;AData: TStream; ABinding: TIdSocketHandle);”. Після прийому значення розмірупередаваного файлу, створюється файловий потік. UDP пакети приймаються, потікзвільняється.
Прийнятий відеофайл відтворюєтьсявідеопрогравачем, розташованому на вкладці “Video player” клієнтськоїприкладної програми (рис. 5). Дане завдання виконується за допомогою динамічноїбібліотеки Microsoft Multimedia Extensions для Windows (MMSYSTEM.DLL), методиякої інкапсульовані в компоненті TMediaPlayer. Блок-схема сумісногофункціонування обох програм наведена в додатку Е.
/>
Рис.5. Процес відтворення відеофайлу

Висновки
В результаті проведення порівняльного аналізупрограмних засобів розробки систем “клієнт-сервер”, для практичної реалізації прикладнихпрограм, вибрана мова об’єктно-орієнтованого програмування Delphi. Розроблені програмидемонструють основні концепції функціонування системи IP-телебачення на базіархітектури “клієнт-сервер”. Клієнтська прикладна програма “Client” виконуєфункції ініціалізатора зв’язку і відправника запитів. Програма “Server” виконуєфункції прослуховування та передачі необхідних даних відповідно до запиту наклієнтську сторону. Процеси комутації забезпечують інструментальні засобиDelphi за допомогою Internet і Internet Direct компонентів, що підтримують низькорівневуроботу як з сокетами, так і з найбільш загальними протоколами Інтернету.