48298 (666037), страница 3
Текст из файла (страница 3)
Рис. 3. Формування запиту клієнтом
Затвердивши запит, адміністратор натискає кнопку “Adopt”, після чого назва файлу відображається в рядку вводу “Send file”. Перед відправленням файл відкривається і завантажується у файловий потік ініціалізацією змінної fs типу TfileStream: “procedure TMainForm.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 компонентів, що підтримують низькорівневу роботу як з сокетами, так і з найбільш загальними протоколами Інтернету.