Розробка програми прийому і передачі повідомлень в локальній мережі Microsoft

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Розробка програми передачі і прийому повідомлень в локальній мережі Microsoft

На сьогоднішній день існує досить велика кількість програм відправки і прийняття повідомлень для локальних мереж під управлінням на платформах від компаній Microsoft, таких як сімейство Windows 9 x (95, 98, ME, XP) і Windows NT 4, Windows 2000, різноманітних як за алгоритмами , так і по використовуваних протоколів. Основним завданням, на яку слід орієнтуватися при виборі подібних програм, є величина бюджету, і як наслідок, витрати на додаткову закупівлю оргтехніки (сервери, додаткові мережі, концентратори).

Тому такі програми поділяються на 2 типи:

  • Програми клієнт-сервер, тобто передача повідомлень здійснюється через виділений сервер.

  • Програми для однорангових мереж, які не потребують виділеного сервера.

До перших засобам передачі повідомлень можна віднести такі програми, як Microsoft Messenger, AOL ICQ, різні чати і телеконференції.

Другий тип програм менш функціональний, але економічно виправданий навіть для невеликого бюджету і вимагає набагато менше системних ресурсів.

Однак існуючі на даний момент програми другого типу є незакінченими по своїм первісним ідеям їх створення.

Метою цього проекту стало створення багатофункціональної програми отримання і відправки повідомлень по локальній мережі. Програма розроблялася в локальній мережі гуртожитку МІЕТ (SWAMP), яка має 400 комп'ютерів на сьогоднішній момент. У процесі створення використовувалися менш функціональні, але аналогічні по розробці програми Winpopup і Traypopup.

Ескізний проект

Опис протоколів, використовуваних при написанні дипломної роботи

Стрімкий розвиток електронної техніки і локальних мереж зумовило необхідність створення сучасного програмного забезпечення, і як наслідок, необхідність розробки швидких і зручних у використанні засобів обміну інформації, зокрема, протоколів.

Протоколи являють собою набір умов (правил), які регламентують формат і процедури обміну інформацією між двома або декількома незалежними пристроями чи процесами. Протокол має три найважливіших елементи: синтаксис, семантику та синхронізацію (timing). Синтаксис протоколу визначає поля, наприклад, може бути 16-байтове поле для адрес, 32-байтове поле для контрольних сум і 512 байт на пакет. Семантика протоколу надає цим полям значення: наприклад, якщо адресне поле складається з всіх адрес, це «широкомовний» пакет. Синхронізація - кількість бітів в секунду - це швидкість передачі даних. Вона важлива не тільки на найнижчих рівнях протоколу, але й на вищих.

У загальних рисах, протокол - це прийнятий набір стандартів, встановлюють порядок спілкування комп'ютерів. У цьому розділі розглядаються протоколи, доступні в операційних системах сімейства Windows, як і коли кожен з протоколів використовується, а також наведено короткий опис кожного протоколу.

Вбудовані основні протоколи Windows:

  • Network Basic Input / Output System (NetBIOS)

  • NetBIOS Extended User Interface (NetBEUI)

  • Transmission Control Protocol (TCP / IP)

  • NWLink Internetwork Packet Exchange / Sequenced packet Exchange (IPX / SPX)

Тепер розглянемо кожен з них.

NetBIOS

NetBIOS надає механізми роботи основних функцій Windows, таких як перегляд й межпроцессное спілкування між мережевими серверами. Даний протокол є дуже швидким, вимагає зовсім невеликого кількості службової інформації, тому він використовується Windows для основних операцій. На жаль, NetBIOS не має можливостей для маршрутизації і тому не може бути використаний в якості основного протоколу для мереж, в яких потрібні такі можливості.

NetBEUI

NetBEUI - простий транспортний протокол мережевого рівня, призначений для підтримки мереж NetBIOS. Як і NetBIOS, NETBEUI не призначений для маршрутизації, так що він теж не може використовуватися у великій мережі. Переваги NetBEUI - це його швидкість і захищеність від помилок, простота застосування і невеликі вимоги до ресурсів. До недоліків можна віднести відсутність коштів маршрутизації. Майже повна відсутність підтримки переносних операцій і дуже малу кількість засобів для пошуку неполадок.

NetBEUI можна використовувати тільки в невеликої мережі. Наприклад, в локальній мережі гуртожитку MIET, де використовуються засоби маршрутизації, застосування даного протоколу є недоцільним.

TCP / IP

Протокол TCP / IP на сьогоднішній день найчастіше використовується для роботи в мережі. Саме до цього протоколу Інтернет зобов'язаний своїм швидким зростанням. TCP / IP - найгнучкіший транспортний протокол, що дозволяє охоплювати великі мережеві простору. Крім того, він надає можливості для підтримки переносних програм, маршрутизації, а також підтримує протоколи SNMP, DHCP, служби WINS і DNS.

TCP / IP може бути використаний в будь-якій мережі, але не рекомендується для маленьких мереж з-за своїх вимог до ресурсів. З його допомогою можна організовувати великі многоранговие мережі.

NWLink (IPX / SPX)

NWLink - це реалізація фірмою Microsoft набору протоколів IPX / SPX, використовуваних фірмою Novell в мережах NetWare. Цей протокол включений в NT для можливості спілкування з серверами NetWare. За допомогою цього протоколу клієнти мереж Microsoft можуть користуватися ресурсами серверів Netware і навпаки

Операційні системи сімейства Windows використовують NWLink для роботи з клієнтами і серверами NetWare. Крім того, клієнтам і серверів NetWare потрібно служба File And Printer Sevice For NetWare для роботи з файлами і принтерами сімейства Windows.

NWLink використовується в мережах, у яких розташовані сервери NetWare, або там, де потрібні засоби маршрутизації, але не вистачає ресурсів для використання протоколу TCP / IP.

Рис.   1.1. Приклад налаштування мережевого оточення OC сімейства Windows

Огляд аналогічних програм прийняття та відправлення повідомлень

Найбільш використовуваними на сьогоднішній момент явлются дві наступні програми, не потребують великих системних ресурсів.

  1. Winpopup.

Входить в стандартну поставку Windows. На відміну від Winpopup, у програмі, представленої в даній дипломній роботі, вікна відправлення та прийняття повідомлень є незалежними, що дуже зручно для швидких переговорів: у вікні відправлення повідомлення пишеться текст, а отримання повідомлень відбувається в іншому вікні і між даними вікнами можна вільно перемикатися . У програмі Winpopup такої незалежності немає, тому для перегляду вхідного повідомлення доводиться скасовувати відправлення свого тексту одержувачу, що є дуже незручною особливістю стандартного засобу надсилання й прийому повідомлень Windows 9 x. Що примітно, в стандартному постачанні Windows NT немає аналога Winpopup, тому дана програма може бути хорошим сервісом для локальних мереж, які з комп'ютерів цієї операційної системи.

  1. Traypopup.

Основна перевага цієї програми перед прабатьком (як і основна відмінність) полягає в тому, що в вікні посилки повідомлення є кнопка Select, яка показує список всіх комп'ютерів, присутніх у мережі. Це зручно, тому що не потрібно згадувати ім'я користувача в тому вигляді, як воно записано в настройках мережі. Також при виклику програми у вікні редагування адреси одержувача виставляється ім'я одержувача попереднього повідомлення.

Друге відміну від стандартної програми - вона не сидить в Панелі Завдань, а переховується в третій, до годинах, що економить місце, з одного боку, але недосвідченому користувачеві буде складно відшукати її серед іконок інших програм, з іншого боку. З недоліків - часто «вилітає» при прийомі повідомлення, а також не може впоратися з кількістю повідомлень, великих 30.

Інші аналогічні програми не розглядаються у зв'язку їх громіздкістю і великими вимогами до ресурсів.

Технічний проект

Загальна структура системи

Програма відправлення та отримання текстових повідомлень в локальній мережі.

Використовуючи поштові слоти (mailslots) і функції NetBIOS, дана програма повністю сумісна з такими стандартними засобами, як WinPopup, net send. Додано ряд корисних нововведень, функцій і можливостей, такі як історія повідомлень, швидкі відповіді, підтримка більшості ОС Microsoft, швидкий список, підтримка мережевих груп.

Поштовий слот (mailslot)

Поштові слоти - це механізм односторонньої пересилання даних між процесами по мережі. Поштові слоти можуть використовуватися для циркулярної розсилки повідомлень цілій групі комп'ютерів одного домену, однак, з іншого боку, немає ніякої гарантії доставки посланих даних за потрібною адресою, а також не передбачено повідомлення відправника про їх отримання.

Будь-який процес, який створює поштову слот для прийому даних, називається сервером слота. Навіть якщо саме по собі програма є клієнтом і отримує дані від програми-сервера, по відношенню до створеного поштової слоту воно являє собою сервер. Для даного слота будь-який комп'ютер може бути сервером, але читати з слота дані (або звертатися до нього іншим способом, наприклад, через успадкування) може тільки процес, який його створив.

Кожен процес, якому відомо ім'я слота, може посилати йому дані. Процеси, які посилають дані на поштову слот, називаються клієнтами слота.

Розглянемо структуру побудови поштового слота, а також процедури, які використовуються при написанні даного дипломного проекту, і опишемо їх.

Створення поштової слота.

Для створення слоту в додатку використовується функція CreateMailSlot ():

HANDLE CreateMailslot (

LPCTSTR lpName,

DWORD nMaxMessageSize,

DWORD lReadTimeout,

LPSECURITY_ATTRIBUTES lpSecurityAttributes);

Перший параметр - це покажчик на ASCII рядок, що містить ім'я створюваного поштового слота. Слоти створюються тільки на локальному комп'ютері, тому повне ім'я слота виглядає наступним чином:

] Ім'я

В іменах поштових слотів підтримується псевдокаталоговая структура. Для кращої організації поштових слотів в їх іменах можна використовувати путі в каталогах.

Функція CreateMailSlot також приймає як параметри максимальний розмір повідомлень, час затримки для операцій читання та необов'язкову захисну структуру. Замість значення затримки можна вказати MAILSLOT _ WAIT _ FOREVER для блокування операцій читання на слоті до отримання повідомлення без обмеження часу.

Якщо функція CreateMailSlot () завершується успішно, вона повертає ключ для нового слота. У випадку помилки повертається значення INVALID _ HANDLE _ VALUE, для отримання коду помилки можна скористатися функцією GetLastError ().

Створення типового поштового слота може бути реалізовано таким чином:

Hslot: = CreateMailSlot («\ \ \ \. \ Mailslot \ \ MySlot \ MsgSlot»,

300,

MAILSLOT_WAIT_FOREVER,

NULL);

If hSlot = INVALID_HANDLE_VALUE then

Begin

ShowMessage ('CreateMailSlot Error', GetLastError ());

Halt (0);

End;

Для зміни часу затримки операцій читання після створення слота використовується функція SetMailSlot (). Крім того, для отримання такої інформації про слот, як максимальний розмір повідомлення, розмір наступного повідомлення в черзі і кількість повідомлень в черзі, можна використовувати функцію GetMailSlotInfo ().

Читання з поштового слота

Для читання з слота використовується функція ReadFile (), яка завершує свою роботу після отримання повідомлення, незалежно від того, скільки байт необхідно прочитати.

Крім того, за допомогою функції GetMailSlotInfo () можна дізнатися кількість повідомлень, які мають в черзі слота, і розмір наступного повідомлення.

Запис в поштову слот

Для запису повідомлення в слот необхідно спочатку відкрити його ключ з допомогою функції CreateFile (), а потім скористатися функцією WriteFile () для посилки повідомлення. Ключ слота закривається функцією CloseHandle ().

При виклику CreateFile () необхідно вказати ім'я слота, якому надсилається повідомлення. Зазначене ім'я допускає циркулярну розсилку даних всім слотам з такими ж іменами на комп'ютерах домену.

Для локального комп'ютера ім'я слота виглядає наступним чином:

] Ім'я

Для віддаленого комп'ютера ім'я слота має наступний вигляд:

] Ім'я

Для розсилки повідомлень всім слотам з однаковими іменами на комп'ютерах домену необхідно вказати наступне ім'я:

] Ім'я

Для розсилання всім комп'ютерам в домені вищого ієрархічного рівня використовується наступне ім'я:

\ \ * \ Mailslot \ [шлях] ім'я

Крім того, при виклику функції CreateFile () можна вибрати режим GENERIC _ WRITE, режим спільного використання FILE _ SHARE _ READ або режим створення OPEN _ EXISTING.

Після успішного завершення функції CreateFile () ключ, який вона повертає, можна використовувати в функції WriteFile () для посилки повідомлень на слот.

Закриття слота.

Після закінчення роботи з поштовим слотом КМО необхідно закрити викликом функції CloseHandle () для звільнення асоційованих з ним системних ресурсів. По завершенні процесу всі ключі слотів, асоційовані з процесом, закриваються автоматично. Після їх закриття поштову слот знищується, а всі дані в його буфері губляться.

Протокол NetBIOS і його команди

При написанні програми з використанням протоколу NetBIOS використовується блок управління мережею - Net Control Block (NCB). У таблиці 1 проілюстрована структура NCB, довжина і значення кожного поля. Всі поля блоку NCB перенесені в WinAPI, відповідно, програмування на Delphi з використанням команд NetBIOS є досить тривіальним завданням.

Візуальні компоненти Delphi, що використовуються при розробці даного дипломного проекту.

TMainMenu дозволяє помістити головне меню у програмі. При приміщенні TMainMenu на форму це виглядає, як просто іконка. Іконки такого типу називають «невидимими компонентом», оскільки вони невидимі під час виконання програми. Створення меню включає три кроки: (1) приміщення TMainMenu на форму, (2) виклик Дизайнера Меню через властивість Items в Інспектора Об'єктів, (3) визначення пунктів меню в Дизайнері Меню.

TPopupMenu дозволяє створювати спливаючі меню. Цей тип меню з'являється після клацання правої кнопки миші на об'єкті, до якого прив'язано це меню. У всіх видимих ​​об'єктів є властивість PopupMenu, де і вказується потрібне меню. Створюється PopupMenu аналогічно головному меню.

TLabel служить для відображення тексту на екрані. Ви можете змінити шрифт і колір мітки, якщо двічі клацнете на властивість Font в Інспектора Об'єктів. Видно, що це легко зробити і під час виконання програми, написавши всього один рядок коду.

TEdit - стандартний керуючий елемент Windows для введення. Він може бути використаний для відображення короткого фрагмента тексту і дозволяє користувачу вводити текст під час виконання програми.

TMemo - інша форма TEdit. Подразумеваєт роботу з великими текстами. TMemo може переносити слова, зберігати в ClipBoard фрагменти тексту і відновлювати їх, і інші основні функції редактора. TMemo має обмеження на обсяг тексту в 32Кб, це становить 10-20 сторінок. (Є VBX і «рідні» компоненти Delphi, де ця межа знятий).

TButton дозволяє виконати будь-які дії при натисканні кнопки під час виконання програми. У Delphi все робиться дуже просто. Помістивши TButton на форму, Ви за подвійним клацанню можете створити заготівлю обробника події натискання кнопки. Далі потрібно заповнити заготівлю кодом:

procedure TForm1. Button1Click (Sender: TObject);

begin

ShowMessage ('Test');

end;

TCheckBox відображає рядок тексту з маленьким віконцем поруч. У віконці можна поставити позначку, яка означає, що щось обрано.

TListBox потрібен для показу прокручуваного списку. Класичний приклад ListBox'а в середовищі Windows - вибір файлу зі списку в пункті меню File | Open багатьох додатків. Назви файлів або директорій і знаходяться в ListBox'е.

TComboBox багато в чому нагадує ListBox, за винятком того, що дозволяє водити інформацію в маленькому полі введення зверху ListBox. Є кілька типів ComboBox, але найбільш популярний спадаючий вниз (drop-down combo box), який можна бачити внизу вікна діалогу вибору файлу.

TScrollbar - смуга прокручування, з'являється автоматично в об'єктах редагування, ListBox'ах при необхідності прокрутки тексту для перегляду.

TGroupBox використовується для візуальних цілей і для вказівки Windows, який порядок переміщення по компонентах на формі (при натисканні клавіші TAB).

TBitBtn - кнопка на кшталт TButton, проте на ній можна розмістити картинку (glyph). TBitBtn має кілька визначених типів (bkClose, bkOK та ін), при виборі яких кнопка приймає відповідний вигляд. Крім того, натискання кнопки на модальному вікні (Form2. ShowModal) призводить до закриття вікна з відповідним модальним результатом (Form2. ModalResult).

TSpeedButton - кнопка для створення панелі швидкого доступу до команд (SpeedBar). Приклад - SpeedBar зліва Палітри Компонент в середовищі Delphi. Зазвичай на дану кнопку поміщається тільки картинка (glyph).

TScrollBox - дозволяє створити на формі прокручиваемую область з розмірами більшими, ніж екран. На цій області можна розмістити свої об'єкти.

TTimer - таймер, подія OnTimer періодично викликається через проміжок часу, вказаний у властивості Interval. Період часу може складати від 1 до 65535 мс.

Вимоги, пред'являються до програми надсилання й прийому повідомлень.

Тепер можна уточнити постановку завдання: потрібно написати систему, що забезпечує виконання таких функцій:

    • реалізація засобів обміну інформацією, використовуючи вищеописані протоколи;

    • використання функцій для зручної роботи прийому та відправки повідомлень;

    • видача даних користувачам за їхніми запитам.

Система повинна працювати під управлінням Windows 95, реалізована в середовищі розробки Delphi 5. Система повинна складатися з двох компонент - ядро реалізації засобів обміну інформацією і призначена для користувача оболонка.

Вибір платформи проектування, обгрунтування

В якості операційного середовища, в якій реалізувався даний дипломний проект, була обрано середовище Windows 9 x (Windows NT). Причини цього наступні:

  • Поширеність цих ОС, у зв'язку з чим виходить охоплення великої кількості можливих користувачів;

  • Можливість роботи з великими масивами даних, реалізація чого в інших середовищах представляє нетривіальну та важковиконувані завдання;

  • Зручність графічного інтерфейсу дає можливість при мінімізації витрат на його реалізацію максимізувати зручність роботи користувача з програмою. Інтерфейс інтуїтивно зрозумілий і стандартизований, відповідно користувач не витратить багато часу на освоєння програми і надалі кількість можливих помилок у його діях буде мінімізовано.

  • 32-розрядність систем Windows 9 x і Windows NT збільшує швидкість роботи з відповідними числами.

У якості середовища програмування була обрано середовище Borland Delphi 5, що поєднує в собі як всі переваги всіх коштів, які стосуються RAD, так і свої власні переваги:

  • Простота і надійність створення та налагодження програми;

  • Використання всіх переваг операційних систем Windows '95 і Windows NT, включаючи 32-розрядність, багатозадачність, зручний інтерфейс та інше;

  • Використання обробки виключень (exceptions), що дозволяє підвищити надійність роботи програмного продукту;

Наявність і доступність великої кількості компонент, що реалізують багато стандартні функції.

Враховуючи специфіку завдання і можливості операційної системи, що розробляється система повинна підкорятися таким вимогам.

Конфігурація технічних засобів

Вимоги до складу і параметрів технічних засобів:

  • i486 66 MHz процесор (Pentium або вище);

  • 4MB оперативної пам'яті;

  • 1Мб вільного простору на жорсткому диску;

- Мережний адаптер;

Необхідне програмне забезпечення:

- Windows'95 або Windows NT 4 і вище;

- Підтримка протоколу TCP / IP.

Робочий проект

Інтерфейс програми

Головна форма містить наступні компоненти:

- Основне меню, що складається з пунктів роботи з повідомленнями і опції для роботи з програмою.

- Кнопки для швидкої роботи з повідомленнями:

  1. Кнопка «Sen d» призначена для посилки повідомлення на ім'я іншого комп'ютера або групу.

  2. Кнопка "Delete" видаляє поточний переглянуте повідомлення.

  3. Кнопки навігації за повідомленнями:

а) Кнопка «<» здійснює перегляд попереднього повідомлення.

б) Кнопка «>» здійснює перегляд наступного повідомлення.

- Рядок стану, що показує текст «No Message» за відсутності повідомлень та інформацію про відправника, одержувача та часу отримання повідомлення при їх наявності.

- Вікно для перегляду повідомлень.

- Номер поточного повідомлення та їх загальна кількість; корисно при навігації і при отриманні великої кількості повідомлень.

Рис. 1.6. Головне вікно програми відправлення і отримання повідомлень.

Опис з методи роботи з програмою Messenger

Основне меню складається з наступних підменю:

- Messages. Складається з наступних спливаючих підменю:

Send, Previous, Next, Delete, Delete All і Exit.

Перші чотири підменю викликають процедуру обробки натискань «швидких» кнопок і повністю аналогічні їм за своїми функціями.

Підменю Delete All видаляє відразу всі, хто прийшов повідомлення.

Підменю Exit здійснює вихід з програми.

- Дане підменю містить параметри для роботи з програмою.

- History. Містить історію відправлених та отриманих повідомлень.

- Help. Містить інформацію про роботу з програмою.

Розглянемо окремо кожну форму.

Рис. 1.7. Налаштування програми

  1. Play sound when new message arrives - Включення / відключення звуку, що подається на колонки через звукову плату при отриманні повідомлення.

  2. Always on top - При включенні цієї опції вікно програми буде завжди знаходитися поверх інших вікон

  3. Pop up dialog on message receipt - При включенні даного параметра вікно програми буде спливати при отриманні повідомлення.

Рис. 1.8. Вікно історії повідомлень

Рис.   1.9. Вікно відправлення повідомлення

Розгляну більш докладно візуальний процес посилки повідомлення.

При натисканні на кнопку «Send» швидкої роботи з повідомленнями, так само як і при виклику спливаючого підменю Send з меню Messages, викликається нове вікно, на якому знаходиться:

  1. Вибір одержувача повідомлень:

a) User or Computer. Ним може бути ім'я користувача, який зайшов у мережу Microsoft або ім'я комп'ютера.

б) Workgroup. Повідомлення можна надіслати на будь-яку групу Win 9 x, в яку можуть бути включені комп'ютери.

  1. Вікно для написання одержувача повідомлень.

  2. Вікно повідомлення.

  3. Кнопка «Send» для відправлення повідомлення.

  4. Кнопка «Cancel» для скасування відправлення повідомлення.

  5. Кнопка «Select» для вибору адресата одержувача.

    Якщо розмір посиланого або отримане повідомлення, більше розміру форми для його написання, то на даній формі стає активним ScrollBar, за допомогою якого можна прокручувати форму, тим самим переглядаючи повідомлення.

    При натисканні на кнопку «Select» викликається вікно пошуку всіх груп і комп'ютерів, що знаходяться в даній локальної мережі.

    Користувачеві досить просто вибрати ім'я в ListBox 'e і натиснути кнопку «OK», після чого обране ім'я автоматично відобразитися у вікні одержувача повідомлення.

    Рис. 1.10. Вибір адресата одержувача

    Пошук комп'ютерів в локальній мережі

    Наведемо приклад коду програми, що реалізовує пошук комп'ютерів в локальній мережі Microsoft.

    procedure TForm4. Button1Click (Sender: TObject);

    var Q, BufferSize: DWord;

    R: THandle;

    Buf: ^ Buffer;

    P: Pointer;

    NR: ^ NETRESOURCE;

    begin

    ListBox1. Clear;

    if WNetOpenEnumA (RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, nil, R) = NO_ERROR then

    begin

    BufferSize: = 0;

    Q: = $ FFFFFFFF;

    if WNetEnumResourceA (R, Q, Buf, BufferSize) <> NO_ERROR then

    begin

    Q: = 1;

    New (Buf);

    while WNetEnumResourceA (R, Q, Buf, BufferSize) = NO_ERROR do

    begin

    begin

    P: = Buf;

    NR: = P;

    ListBox1. Items. Add (NR ^. LpProvider);

    L. Add (Buf);

    end;

    Q: = $ FFFFFFFF;

    New (Buf);

    end;

    Dispose (Buf);

    end;

    WNetCloseEnum (R);

    end;

    end;

    procedure TForm4. FormCreate (Sender: TObject);

    begin

    ListBox1. Clear;

    L: = TList. Create;

    end;

    procedure TForm4. FormClose (Sender: TObject; var Action: TCloseAction);

    var I: Integer;

    begin

    for I: = 0 to L. Count - 1 do

    begin

    Dispose (L. Items [I]);

    end;

    L. Free;

    end;

    procedure TForm4. Button2Click (Sender: TObject);

    var

    s: string;

    begin

    if ListBox1. ItemIndex <> -1 then

    begin

    s: = ListBox1. Items [ListBox1. ItemIndex];

    if s [1] = '\' then Delete (s, 1, 2);

    Form2. Edit1. Text: = s;

    ModalResult: = mrOK;

    end;

    end;

    procedure TForm4. ListBox1DblClick (Sender: TObject);

    var Q, BufferSize: DWord;

    R: THandle;

    Buf: ^ Buffer;

    P: Pointer;

    NR: ^ NETRESOURCE;

    NREsource: NETRESOURCE;

    I: Integer;

    Err: Integer;

    Path: string;

    Sr: TSearchRec;

    begin

    NR: = L. Items [ListBox1. ItemIndex];

    Move (NR ^, NResource, SizeOf (NETRESOURCE));

    ListBox1. Clear;

    Path: = NResource.lpRemoteName;

    Err: = WNetOpenEnumA (RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @ NResource, R);

    for I: = 0 to L. Count -1 do

    begin

    Dispose (L. Items [I]);

    end;

    L. Clear;

    if Err = NO_ERROR then

    begin

    BufferSize: = 1024;

    q: = 1;

    New (Buf);

    while WNetEnumResourceA (R, Q, Buf, BufferSize) = NO_ERROR do

    begin

    begin

    P: = Buf;

    NR: = P;

    ListBox1. Items. Add (NR ^. LpRemoteName);

    L. Add (Buf);

    end;

    New (Buf);

    end;

    Dispose (Buf);

    end;

    WNetCloseEnum (R);

    end;

    Відправлення повідомлень

    Наведемо частина коду програми, що реалізовує відправлення повідомлень:

    function TForm2.NBName (s: string): string;

    const

    size = 1024;

    var

    ncb: TNCB;

    buf, p: PChar;

    i, k: integer;

    ch: char;

    res: string;

    begin

    NBName :='';

    GetMem (buf, size);

    FillChar (ncb, SizeOf (TNCB), 0);

    ncb.ncb_command: = char (NCBASTAT);

    ncb.ncb_buffer: = buf;

    ncb.ncb_length: = size;

    for i: = 1 to Length (s) do

    ncb.ncb_callname [i 1]: = UpCase (s [i]);

    for i: = Length (s) to NCBNAMSZ do ncb.ncb_callname [i]: = '';

    ncb.ncb_callname [NCBNAMSZ 1]: = # 03;

    ch: = netbios (addr (ncb));

    if (ch <> # 0) and (ncb.ncb_retcode <> # 0) then Exit;

    p: = ncb.ncb_buffer;

    with PAdapterStatus (ncb.ncb_buffer) ^ do

    begin

    p: = p + SizeOf (TAdapterStatus);

    for i: = 0 to name_count 1 do

    begin

    with PNameBuffer (p) ^ do

    begin

    if (name [NCBNAMSZ 1] = '') and ((ord (name_flags) and UNIQUE_NAME) = UNIQUE_NAME) then

    begin

    res :='';

    for k: = 0 to NCBNAMSZ 2 do if name [k] <> '' then res: = res + name [k];

    NBName: = res;

    end;

    end;

    p: = p + SizeOf (TNameBuffer);

    end;

    end;

    FreeMem (buf);

    end;

    procedure TForm2. Button1Click (Sender: TObject);

    var

    handle: THandle;

    lpFileName: PChar;

    lpNumberOfBytesWritten: Cardinal;

    buffer: string;

    i: integer;

    s: LPSTR;

    comp: string;

    name, name2: PChar;

    name1: string;

    namesize: DWORD;

    begin

    Button1. Enabled: = False;

    if RadioButton1. Checked then

    begin

    comp: = NBName (Edit1. Text);

    lpFileName: = PChar ('\ \' + comp + '\ mailslot \ messngr' + # 0);

    handle: = CreateFile (lpFileName, GENERIC_WRITE, 0, NIL, CREATE_ALWAYS, 0, 0);

    if handle = INVALID_HANDLE_VALUE then

    begin

    ShowMessage ('Error when executing CreateFile ()');

    end;

    buffer :='';

    for i: = 0 to Memo1. Lines. Count 1 do

    buffer: = buffer + Memo1. Lines. Text + # 10 + # 13;

    name1 :='';

    namesize: = MAX_COMPUTERNAME_LENGTH + 1;

    GetMem (name, MAX_COMPUTERNAME_LENGTH + 1);

    GetComputerName (name, namesize);

    name2: = name;

    for i: = 0 to namesize 1 do

    begin

    name1: = name1 + name2 ^;

    name2: = name2 +1;

    end;

    FreeMem (name);

    buffer: = name1 + # 0 + Edit1. Text + # 0 + buffer;

    s: = LPSTR (buffer);

    WriteFile (handle, s ^, length (buffer) - 2, lpNumberOfBytesWritten, NIL);

    if length (buffer) - 2 <> lpNumberOfBytesWritten then

    begin

    ShowMessage ('Error when writing file. Number Of Bytes Written:' + IntToStr (lpNumberOfBytesWritten));

    end;

    CloseHandle (handle);

    end;

    Button1. Enabled: = True;

    end;

    Використовуючи функції NetBIOS, процедура Tform 2. NBName визначає. чи є адресат користувачем віддаленої машини або це ім'я є самим комп'ютером, а також, чи не є адресат робочою групою мережі Microsoft.

    Також, частина даної процедури визначає, запущена чи ні на даній машині ще одна програма «спливаючих повідомлень». Так як для сумісності з аналогічними програмами потрібно вказати одне і те ж ім'я поштового слоту (в даному випадку, ім'я комп'ютера, на якому запущено дане додаток), то при наявності іншої подібної програми показується вікно з кодом помилки. Код помилки визначається засобами NetBIOS і в даній дипломній роботі реалізована процедурою NBName.

    Рис. 1.11. Помилка при створенні поштового слота

    Коди помилок, що видаються NetBIOS, вказані в технічному проекті.

    Структура прийому повідомлень

    Прикладна програма, використовуючи інтерфейс WinAPI і вбудовані функції Windows, постійно опитує поштову слот на наявність приходить повідомлення. На відміну від DOS, наприклад, в якому дана реалізація представляла б нескінченний цикл і всі ресурси комп'ютера йшли б на очікування повідомлення, операційне середовище Windows дозволяє створювати такі цикли без практичної втрати ресурсів, розділяючи частині програми на потоки (threads). При наявності повідомлення в поштовій слоті воно передається в програму засобами NetBIOS. Поштовий слот може містити в собі будь-яку кількість повідомлень, незалежно від того, коли вони всі будуть затребувані даною програмою.

    Прийом повідомлень можна реалізувати наступним чином:

    Var L: Tlist;

    procedure TForm1. ShowMess;

    var

    p: PChar;

    s: string;

    begin

    Memo1. Clear;

    p: = L. Items [Current];

    s: = 'Message from';

    repeat

    s: = s + p ^;

    p: = p +1;

    until (p ^ = # 0);

    p: = p +1;

    s: = s + 'to';

    repeat

    s: = s + p ^;

    p: = p +1;

    until (p ^ = # 0);

    Label1. Caption: = s;

    p: = p +1;

    s :='';

    repeat

    s: = s + p ^;

    p: = p +1;

    until (p ^ = # 0);

    Memo1. Lines. Add (s);

    StatusBar1. Panels [0]. Text: = 'Current message:' + IntToStr (current +1);

    StatusBar1. Panels [1]. Text: = 'Total number of messages:' + IntToStr (L. Count);

    end;

    procedure TForm1. Timer1Timer (Sender: TObject);

    var

    lpNextSize: DWORD;

    lpMessageCount: pointer;

    buffer: PChar;

    lpNumberOfBytesRead: DWORD;

    MessageCount, all: DWORD;

    s: string;

    begin

    lpMessageCount: = addr (MessageCount);

    if GetMailslotInfo (h, nil, lpNextSize, lpMessageCount, nil) then

    begin

    if lpNextSize <> MAILSLOT_NO_MESSAGE then

    begin

    Beep;

    all: = MessageCount;

    while all <> 0 do

    begin

    GetMem (buffer, lpNextSize);

    if ReadFile (h, buffer ^, lpNextSize, lpNumberOfBytesRead, nil) then

    begin

    s :='';

    L. Add (buffer);

    StatusBar1. Panels [1]. Text: = 'Total number of messages:' + IntToStr (L. Count);

    if L. Count = 1 then begin current: = 0; ShowMess; end;

    GetMailslotInfo (h, nil, lpNextSize, lpMessageCount, nil);

    end

    else FreeMem (buffer);

    all: = all 1;

    end;

    end;

    end;

    end;

    Процедура Timer 1 Timer є ядром отримання повідомлень, у той час як ShowMess - реалізацією видачі повідомлення на екран у вигляді, зрозумілому користувачу.

    Рядки

    StatusBar1. Panels [0]. Text: = 'Current message:' + IntToStr (current +1);

    StatusBar1. Panels [1]. Text: = 'Total number of messages:' + IntToStr (L. Count), що входять до складу даної процедури, характеризують номер повідомлення за рахунком всієї кількості повідомлень і кількість всіх повідомлень.

    З урахуванням вищеописаного, що прийшло повідомлення виглядає таким чином:

    Рис.   1.12. Приклад отриманого повідомлення

    Використовуючи кнопки навігації, можна легко переглядати всі прийшли повідомлення, одночасно використовую інші функції Messenger 'a.

    Рис. 1.13. Огляд повідомлень, що прийшли

    У даному розділі в частині літературного огляду були розглянуті загальні положення, застосовувані розробниками програмного забезпечення засобів передачі інформації в мережах Microsoft, дані основні підходи створення програм відправки і прийняття повідомлень; показаний приклад розробки даного програмного забезпечення.

    У розділі «Постановка завдання» були розглянуті вимоги до системи.

    Технічний проект містить загальну структуру системи, структуру даних, зв'язку між об'єктами, алгоритмічні зв'язку, простота використання подібних програм для користувачів, коротко описані основні типи компонент і класів, що використовуються для написання програм відправки повідомлень.

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

    У цілому представлена ​​повна і об'єктивна картина, що відображає зміст виконаних робіт з проектування програм роботи з мережевими протоколами операційних систем сімейства Windows, створення алгоритмів реалізації аналогічного програмного забезпечення та їх програмної реалізації.

    Розробка програм у середовищі Borland Delphi 5 належить до технології RAD (Rapid Application Development) - швидке створення додатків. До появи RAD засобів робилися спроби полегшити працю програміста, зробити цю працю більш продуктивним, підвищивши цим швидкодія і зручність створення додатків. Спочатку з'явилися інтегровані середовища розробки - IDE (Integrated Development Environment), що об'єднують компілятор, спеціальний текстовий редактор, орієнтований на роботи з текстами на цільовому мовою програмування та засоби налагодження - трассировщик, дебаггер та інші. У порівнянні з попередніми засобами програмування це був великий крок вперед, але потім з'явилися CASE кошти, які дозволяли максимально візуалізувати процес створення програми, але користуватися ними було надто незручно через їх негнучкості. У більшості випадків написати досить складну програму було дуже важко. Засоби RAD, взявши все найкраще з інтегрованих середовищ розробки і CASE систем, об'єднали гнучкість роботи з вихідними текстами зі зручністю створення графічного інтерфейсу користувача - GUI (Graphic User Interface). На жаль, більшість RAD коштів не дозволяють візуалізувати логіку самої програми, але і ті методи, які закладені в Delphi 5, дозволяють підняти продуктивність розробки програм в 2-3 рази.

    Особливості розробки програм в середовищі Delphi 5

    Основними підходами до програмування на Delphi є візуальна компонентного і багаторазове використання коду. Розгляну кожен з цих методів окремо.

    Візуальна компонентного

    Даний підхід є логічним розвитком об'єктно-орієнтованого програмування (ООП). Кожен компонент має свої події (events), методи (methods) і властивості (properties). Методи і події прийшли з об'єктно-орієнтованого програмування, а властивості є привілеєм компонентного підходу. Властивості дозволяють змінити стан компонента, причому як динамічно - під час роботи програми, так і статично - візуально під час розробки. Природно, що компоненти має всі ті особливості, що й об'єкти в об'єктно-орієнтованому програмуванні - успадкування, поліморфізм і інкапсуляція.

    Багаторазове використання коду

    Термін «багаторазове використання коду» (code reuse) говорить сам за себе. Дана технологія передбачає можливість написання таких ділянок програм, які потім з невеликими змінами (або зовсім без змін) можуть бути використані в іншій програмі. Не можна сказати, що такий підхід є привілеєм RAD-засобів: ще раніше програмісти зрозуміли переваги можливості виділення універсальних і часто використовуваних підпрограм в окремі бібліотеки (модулі). Таким чином, з'являлися бібліотеки підпрограм для різних мов програмування, що працюють з графікою, базами даних, що реалізують багато математичні функції та інші універсальні завдання. Але саме в RAD засобах технологія багаторазового використання коду придбала закінчений і цілісний вигляд - існує широкий набір стандартних компонентів, які можуть використовуватися в багатьох програмах різного типу.

    Складність даного підходу у зміні ідеології програмування - розробник повинен спочатку орієнтуватися на створення коду, який потім можна буде багаторазово використовувати. Особливо актуальна ця проблема для груп розробників. У цьому випадку необхідно мислити глобально, з урахуванням вимог усіх членів групи і перспективи подальших розробок.

    Крім описаних вище засобів, існує також деякий набір інструментів, призначення якого полягає у автоматизації рутинної роботи з написання операційних середовищ, графічних інтерфейсів і т.д.

    C творення програм у середовищі Delphi

    C творення програм у середовищі Delphi є зручним і простим справою. Для генерації програми спочатку необхідно створити файл проекту, ім'я якого буде збігатися з ім'ям майбутньої програми. Причому Delphi сама зробить каркас програми - користувачеві необхідно тільки вибрати відповідний пункт у діалоговому вікні New, яке показано на рис. 1:

    Рис. 2.1. Вікно вибору об'єкта створення

    Таким чином, обравши тип створюваної програми, програміст отримає готовий шаблон, який потім необхідно буде заповнити змістом.

    Кожне вікно в Delphi називається формою. На формі розташовуються різні візуальні і візуальні компоненти. Весь набір компонентів, доступних в системі, зберігається у файлі complib. Dcl або у файлі з іншим ім'ям і відображається в спеціальному вікні середовища Delphi, званому «палітрою компонент» (component palette).

    Палітра розбивається на сторінки, що групує компоненти з яких-небудь загальних ознак.

    Рис. 2.2. Палітра компонент

    Опишу основні компоненти палітри.

    Standard. Більшість компонентів на цій сторінці є аналогами екранних елементів самої Windows. Але компоненти Delphi мають також деякими зручними додатковими вбудованими можливостями.

    Additional. Ця сторінка містить більш розвинуті компоненти. Наприклад, компонент Outline зручний для відображення інформації з ієрархічною структурою, а MediaPlayer дозволить вашим програмам відтворювати звук, музику і відео. Дана сторінка також містить компоненти, головне призначення яких - відображення графічної інформації. Компонент Image завантажує і відображає растрові зображення, а компонент Shape, дозволяє розмістити на формі кола, квадрати і т.д.
    System. Оскільки не кожна потреба, пов'язана з обробкою файлів, може бути задоволена за допомогою стандартних діалогових вікон, сторінка System надає можливість комбінувати окремі елементи, такі як списки дисків, каталогів і файлів. Сторінка System також містить компоненти, що обробляють обмін високого рівня між програмами за допомогою OLE (Object Linking and Embedding). А компонент Timer може генерувати події через певні, заздалегідь встановлені проміжки часу.

    Win32. Ця сторінка містить компоненти, що дозволяють створеним за допомогою Delphi програмам використовувати такі нововведення в інтерфейсі 32 розрядної Windows, як перегляд деревовидних структур, перегляд списків, панель стану, присутня в інтерфейсі програми Windows Explorer (Провідник), розширений текстовий редактор і ін

    Dialogs. Windows 3.1 ввела у вживання стандартні діалогові вікна для операцій над файлами, вибору шрифтів, кольорів і т.д. Однак для використання їх у звичайній програмі Windows може знадобитися написати чимало допоміжного коду. Сторінка Dialogs надає програмам Delphi простий доступ до цих стандартних діалогових вікон.
    Data Access і Data Controls. Delphi використовує механізм баз даних компанії Borland (Borland Database Engine, BDE) для організації доступу до файлів баз даних різних форматів. Компоненти цих двох сторінок полегшують програмами Delphi використання сервісу баз даних, що надається BDE, наприклад багатокористувацького зчитування, запису, індексації та видачі запитів для таблиць dBASE і Paradox. З використанням цих компонентів створення програми перегляду майже не вимагає програмування.
    Internet. Ця сторінка надає компоненти для розробки додатків, що дозволяють створювати HTML файли безпосередньо з файлів баз даних та інших типів, що взаємодіють з іншими додатками для Internet. Delphi 4 дає можливість створювати додатки для Web сервера у вигляді DLL файлів; (Dynamic Link Library - Динамічно компонуемие бібліотека), здатних містити невізуальні компоненти. За допомогою компонентів сторінки Internet досить просто створювати обробники подій для звернення до певного URL (Uniform Resource Locator - Уніфікований локатор ресурсу), подання документів в HTML форматі і пересилання їх клієнт-програмі.
    ActiveX. Ця сторінка містить компоненти ActiveX, розроблені незалежними виробниками програмного забезпечення: сітка, діаграма, засіб перевірки правопису.
    Midas і Decision Cube. Тут зібрані компоненти для доступу до віддалених серверів і здійснення SQL - запитів.

    Гнучкість середовища Delphi дозволяє настроювати палітру на свій розсуд - об'єднувати, розбивати сторінки, переносити компоненти з однієї сторінки на іншу і т.п. Для того, щоб помістити компонент на форму, необхідно натиснути на його зображенні на палітрі компонент кнопку «миші», потім перемістити покажчик «миші» на потрібне місце і там відпустити. Це процес призведе до того, що в класу форми з'явиться поле типу цього компоненту. Зібравши на одну форму кілька компонентів, можна отримає як завгодно складні діалогові вікна з полями введення, мемо-полями і іншими компонентами. Простий приклад створюваного вікна (у режимі розробки).

    Розробляється форма з декількома візуальними компонентами. Хоча кількість візуальних компонент на формі практично не обмежена, здоровий глузд підказує, що перевантажувати форму ними не доцільно, оскільки користуватися програмою з великою кількістю кнопок, полів для введення і т.д. буде важко через інформаційну перенасиченості. Крім того, рекомендується кожен візуальний компонент постачати рядком опису, щоб користувач міг здогадатися, що ж від нього вимагається.

    Крім візуальних, існують також невізуальні компоненти. Помістивши такий компонент на форму і запустивши програму, ми нічого не побачимо. Але деякі компоненти під час роботи себе відображають, правда для цього необхідно викликати їх методи. До таких компонентів відноситься всілякі діалогові компоненти, наприклад OpenDialog, який є стандартним вікном для відкриття файлу. Інші невізуальні компоненти зовні ніяк себе не проявляють, наприклад компонент DataSet.

    Властивості кожного компонента і форми в цілому, а також події, на які вони відгукуються, відображаються у вікні інспектора об'єктів (object inspector). Інспектор об'єктів має дві сторінки - сторінку з властивостями і сторінку з подіями. Загальний вигляд обох сторінок вказаний на рис. 2.4:

    Рис. 2.4. Інспектор об'єктів

    При редагуванні властивості в інспекторі об'єктів враховується тип цієї властивості. Наприклад, якщо властивість логічного типу, то можливий буде вибір тільки лише між значеннями True і False. Для більш складних властивостей, наприклад, для списків рядків, існують свої редактори властивостей. Наприклад, компонент ComboBox з рис. 8 має властивість Items типу списку рядків - TStrings. У цьому випадку натискання на кнопку з трьома крапками, розташовану поруч з іменем властивості, призведе до активізації редактора списку рядків. Його вигляд показаний на рис. 5

    Для нестандартних властивостей, описаних програмістом, існує можливість створення свого редактора властивостей методами Delphi.

    Рис. 2.5. Редактор списку рядків

    Крім завдання значень властивостей, інспектор допомагає задавати реакцію на всілякі події, які можуть відбуватися в програмі - переміщення покажчика «миші», натискання і відпускання клавіш клавіатури і т.п. На відповідній сторінці інспектора є список безлічі стандартних для компонента (або форми) подій. Кожному події відповідає своя процедура обробки цієї події. Причому одна процедура може обробляти кілька подій. Все це вказується за допомогою інспектора подій.

    Зауважу, що візуальними засобами середовища Delphi побудувати закінчила додаток практично неможливо. Такими засобами можна тільки полегшити створення програми. Всю логіку доведеться писати старим методом - для кожної процедури обробки подій вручну вписувати код.

    Однак, існує певна методика написання програми, покликана полегшити власне розробку і заощадити час на подання готового продукту і його подальшу модернізацію.

    Основні етапи розв'язування задач на ЕОМ

    Складання проекту

    На підставі аналізу технічного завдання програміст вибирає основний метод рішення задачі, складає спільний проект програми. Обраний підхід до вирішення завдання повинен забезпечувати правильні результати для тих умов функціонування програми, які визначені ТЗ, гарантувати необхідну швидкість роботи, передбачати зручність використання програми і т.п.

    У проекті також характеризуються основні частини проектованої програми, їх функції, взаємозв'язок і послідовність виконання, а також точно визначаються вхідні дані і видані результати як всієї програми, так і основних її частин.

    Алгоритмізація

    При розробці алгоритму необхідно враховувати ресурси використовуваної ЕОМ (її швидкість, пам'ять) і можливості застосовуваної для розв'язання задачі операційної системи. Алгоритми для нескладних завдань, вимоги яких до ресурсів невеликі, є зазвичай машинно-незалежними. Алгоритм зручно записувати у вигляді блок-схем.

    Програмування

    У випадку, коли на попередньому етапі був отриманий детально розроблений алгоритм, складання програми на обраному для програмування мовою (алгоритмічній мові високого рівня, автокод, асемблері або машинною мовою) зводиться до перекладу цього алгоритму на мову програмування. Основні труднощі при написанні полягає в доскональному знанні вимог мови та постійній увазі до деталей програми. Якщо етап 2.4.2. Був виконаний неякісно, ​​програмісту доведеться доопрацьовувати програму «на ходу», під час написання.

    Трансляція

    Транслятор в ході здійснення трансляції здійснює пошук синтаксичних помилок в програмі і, в разі їх виявлення, виводить діагностику, допомагає подальшої локалізації помилок. Трансляція, а разом з нею і пошук синтаксичних помилок, можуть бути припинені, якщо знайдена дуже груба помилка.

    Налагодження

    На етапі налагодження проводиться виявлення за допомогою ЕОМ помилок в програмі і їх виправлення. Етап налагодження можна розділити на три підетапи:

    6.1. Контроль правильності програми.

    6.2. Локалізація помилок.

    6.3. Виправлення помилок.

    Докладно про налагодження буде вказано у розділі 2.5.

    Оформлення програми

    Для можливості експлуатації програми ким-небудь крім автора вона повинна бути оформлена: складено її опис, виготовлені машинні носії для передачі програми користувачам.

    Звіт про роботу

    На підставі результатів, отриманих в ході експлуатації програми, складається звіт про виконану роботу, оцінюється обраний спосіб розв'язання задачі та ефективність програми; публікуються наукові висновки.

    Модернізація

    При активній експлуатації програми рано чи пізно постає питання про модернізацію старої програми або складанні нової, розвиваючої ідеї, реалізовані у першій програмі. Тому для зменшення часу модернізації рекомендується застосовувати стуктурований написання вихідної програми.

    У цій частині була розглянута спрощена схема розробки програми у середовищі Delphi. Але крім створення вихідного тексту необхідно пам'ятати і про налагодження програм.

    Методи і засоби налагодження

    Виявляється, практично неможливо скласти реальну програму без помилок, і майже неможливо для досить складної програми швидко знайти і усунути всі наявні в ній помилки.

    Таким чином, можна сказати, що наявність помилок у щойно розробленій програмі це цілком нормальне і закономірне явище. А зовсім ненормальним, з ряду геть вихідним фактом є відсутність помилок у програмі, яка не була ще піддана ретельної налагодженні. Звичайно, мова тут йде про реальні, досить складних програмах. Враховуючи цей сумний закон, розумно вже при розробці програми на етапах алгоритмізації та програмування готуватися до виявлення помилок на стадії налагодження вживати профілактичних заходів щодо їх попередження. Наприклад, вже на першому етапі, коли вибирається загальний метод рішення задачі, слід розробити і основну стратегію налагодження, загальний план її проведення. Необхідно вже на цій стадії розробки програми вирішити, яким шляхом можна буде в подальшому переконатися, що обраний метод розв'язання задачі забезпечує правильні результати для зазначених у ТЗ діапазонів зміни величин та умов функціонування програми.

    При розробці алгоритму програми вирішуються тактичні питання проведення налагодження, намічаються способи контролю окремих блоків і прийоми майбутньої локалізації помилок у них. Для цього проектуються контрольні приклади, за алгоритмами (блок-схемами) намічаються місця і моменти необхідної налагоджувальної друку і вибираються виводяться на друк дані, які повинні забезпечити можливість швидкої локалізації помилок при налагодженні. Розробляючи алгоритм, слід, таким чином, враховувати, чи можна буде досить просто проконтролювати програму, складену за обраним алгоритмом, і у випадку, коли передбачаються великі труднощі, потрібно віддати перевагу іншому, більш вигідному для етапу налагодження, алгоритмом. Потрібно завжди пам'ятати, що головним критерієм цінності програми є її правильність, і для гарантування такої властивості програми слід жертвувати іншими показниками, такими, наприклад, як швидкість роботи або необхідний обсяг пам'яті. Давно пішли в минуле ті часи, коли програму оцінювали лише за кількістю команд в ній.

    Взагалі, можна вважати, що саме на етапах алгоритмізації та програмування закладається фундамент швидкої та успішної налагодження. Чим ретельніше проведені етапи постановки задачі, і зокрема, що більш детально розроблений план налагодження, чим більше уваги було приділено перевірці складеного алгоритму і програми, а також застосуванню налагоджувальних засобів для полегшення майбутньої налагодження, тим менше часу буде потрібно на проведення самої налагодження і тим швидше будуть отримані на ЕОМ результати, яким можна буде довіряти. Навпаки, прагнення до максимально швидкого складання програми з метою якнайшвидшого початку (і закінчення) її налагодження, призводить до зворотного результату: налагодження затягується надовго, і отримання достовірних результатів відкладається на тривалий термін. Така затримка викликається тим, що вже на пізніх етапах налагодження (а іноді - і рахунки) розкриваються все нові й нові помилки, допущені на етапах алгоритмізації та програмування, і доводиться витрачати багато часу на їх виявлення та виправлення. Крім того, кожне виконання внутрішнього циклу вимагає звернення до ЕОМ за отриманням нових результатів, на очікування яких витрачається зазвичай від декількох годин до декількох днів. Напрошується висновок, що для прискорення налагодження потрібно скоротити кратності зазначених циклів, виходячи на машину з програмою вже ретельно перевіреною і підготовленої заздалегідь до налагодження.

    Перерахую зміст етапів 1-6, що мають на меті полегшити майбутню налагодження і скоротити час її проведення.

    1. Розробка загального плану проведення налагодження, загальної методики перевірки правильності складеної програми, а також системи необхідних для налагодження контрольних прикладів.

    2. Перевірка розроблених алгоритмів, вибір налагоджувальних засобів і визначення контрольованих ними місць, дільниць, величин.

    3. Перевірка складеної програми, реалізація наміченого раніше плану використання налагоджувальних засобів для отримання на ЕОМ необхідних при локалізації помилок тестових результатів; виготовлення еталонних результатів для тестів.

    4. Введення, друк і звірка тексту програми, перенесеної на зовнішні носії.

    5. Отримання за допомогою транслятора допоміжних таблиць (наприклад, таблиця перехресних посилань) та перевірка їх.

    6. Ретельний контроль перших результатів, одержуваних за новою програмою.

    У початківців програмістів викладений плановий підхід до проведення налагодження (етапи 1 і 2) викликає спочатку труднощі, оскільки їм доводиться розробляти план налагодження для неіснуючої поки програми. Але немає іншого шляху освоїти цей ефективний спосіб, крім як розвивати в собі навички планування своєї роботи і передбачення особливостей майбутньої налагодження програми з її проектом і загальним алгоритмам. Чим на більш ранній стадії розробки програміст починає займатися питаннями налагодження програми, тим менше неприємних несподіванок чекає його в майбутньому. Надії на те, що усунення помилок з програми і отримання правильних результатів відбудеться якось само собою, без витрати особливих зусиль, ніколи не виправдовуються. Взагалі, оптимізм і самовпевненість для програміста на стадії розробки протипоказані; вони можуть бути корисними лише на стадії налагодження при затяжній боротьбі з дуже глибоко прихованими помилками.

    Приблизне розподілення між етапами загального часу, необхідного для розробки досить складних програм, виглядає наступним чином [1, 6]:

    1. Отримання завдання, складання проекту програми і загального плану налагодження 10%.

    2. Розробка алгоритму (15%) і детального плану налагодження 20%.

    3. Програмування (5%) та виготовлення тестів 15%.

    4. Підготовка і перша трансляція 5%.

    5. Налагодження 40%.

    6. Оформлення програми 10%.

    Наведені цифри відображають той факт, що в процесі розробки програми роботи з доведення (демонстрації) правильності програми, що розробляється рівнозначні робіт по її виготовленню (проектування, алгоритмізації та написання), що можна виразити наступною формулою:

    розробка програми = виготовлення + доказ.

    Тому програмою слід було б називати тільки таку програму, яка видає правильні результати, а те, що ще не пройшло стадію докази правильності, є не програмою, а її напівфабрикатом.

    Звичайно, для простих завдань розподіл часу між етапами буде дещо іншим, за рахунок збільшення частки програмування по відношенню до алгоритмізації і налагодженні. Але, як правило, час, що витрачається на роботи, пов'язані з налагодженням, складає близько половини всього часу, необхідного на розробку програми. Тому питання мінімізації часу, необхідного на налагодження, має особливе значення. До його рішенню можна підійти з двох сторін:

    а) шляхом прискорення пошуку і виправлення помилок, що є в програмі;

    б) шляхом зменшення кількості помилок, які допускаються при розробці алгоритму і складанні програми.

    Контроль програми

    Підетапів контролю програми характеризується як етап вирішення завдання, метою якого є встановлення наявності помилок у складеній програмі або переконлива демонстрація їх відсутності. Якщо буде встановлено, що помилки в програмі є, то на наступному етапі (етап локалізації) буде проводитися їх пошук. Тому в завдання контролю входить також отримання ще й такої інформації про характер роботи програми, яка могла б допомогти в подальшому при пошуку помилок.

    Контроль тексту

    Контроль тексту програми можна робити як «вручну», так і з застосуванням ЕОМ. Спочатку розглянемо «ручні» методи контролю тексту програм (алгоритмів).

    Можна розрізняти три способів контролю тексту без застосування ЕОМ: перегляд, перевірка і прокрутка.

    Перегляд

    Текст складеної програми уважно проглядається на предмет виявлення помилок, описок і смислових розбіжностей з текстом алгоритму, за яким здійснювалось програмування. Крім суцільного перегляду застосовується ще і вибірковий перегляд деяких фрагментів програми.

    Перевірка

    При перевірці програми програміст по тексту програми подумки намагається відновити той обчислювальний процес, який визначає програма, після чого звіряє його з необхідним процесом, тобто ТЗ, визначеному в проекті.

    Прокрутка

    Іншим спосіб контролю програм та алгоритмів за столом є прокрутка (іноді її називають «сухий» прокруткою - dry running - для відмінності від методу прокручування, застосовуваного на етапі локалізації та використовує ЕОМ.) Основою прокручування є імітація програмістом виконання програми на машині, з метою більш конкретного і наочного уявлення про процес, який визначається текстом програми, що перевіряється. Прокрутка дає можливість наблизити послідовність перевірки програми до послідовності її виконання, що дозволяє перевіряти програму як би в динаміці її роботи, перевіряти елементи обчислювального процесу, що задається перевіряється програмою, а не тільки статичний текст програми. Для виконання прокручування зазвичай доводиться задаватися якимись вихідними даними і робити над ними необхідні обчислення.

    Друк тексту

    Для перевірки правильності препарації програми (переносу тексту програми на будь-які машинні носії) після введення в машину виробляється на друк тексту програми для подальшої його звірки з вихідним текстом.

    Контроль результатів

    Як би не була ретельно перевірена і прокручена програма за столом, вирішальним етапом, що встановлює її придатність для роботи, є контроль програми за результатами її виконання на ЕОМ. Найбільш універсальним методом перевірки для всіх класів задач є метод контрольних тестів або тестування. Тестом будемо називати інформацію, що складається з вихідних даних, спеціально підібраних для налагоджують програму, і з відповідних їм еталонних результатів (не тільки остаточних, але і проміжних), використовуваних в подальшому для контролю правильності роботи програми.

    Тестування

    Під тестуванням слід розуміти процес виконання програми з метою виявлення помилок, у якості яких приймається будь-яке відхилення від еталонів. Гарним вважається тест, який має високу ймовірність виявлення ще не виявлених помилок.

    Під налагодженням розуміється процес, що дозволяє отримати програму, яка функціонує з необхідними характеристиками в заданій області вхідних даних. Таким чином, в результаті налагодження програма повинна відповідати деякої фіксованої сукупності правил і показників якості, прийнятої за еталонну для даної програми.

    Існує 3 основних способи тестування: алгоритмічне, аналітичне, змістовне.

    Алгоритмічне тестування

    Алгоритмічне тестування застосовується програмістом для контролю етапів алгоритмізації та програмування. Програмісти проектують тести і починають готувати еталонні результати на етапі алгоритмізації, а використовують їх на етапі налагодження.

    Функціональне або аналітичне тестування

    Аналітичне тестування служить для контролю обраного методу розв'язання задачі, правильності його роботи в обраних режимах і з встановленими діапазонами даних. Тести проектують і починають готувати відразу після вибору методу, а використовують їх на останньому етапі налагодження або для аналізу результатів пробного рахунку; в ході тестування, поряд із звіркою на збіг, застосовуються і якісні оцінки результатів.

    Змістовне тестування

    Змістовне тестування служить для перевірки правильності постановки завдання. Для контролю при цьому використовуються, як правило, якісні оцінки та статистичні характеристики програми, фізичний зміст отриманих результатів і т.п. у проведенні змістовного тестування, принципи якого формулюються в технічному завданні, найактивнішу участь повинні брати замовники або йдуть користувачі програми.

    Змістовні та аналітичні тести перевіряють правильність роботи програми в цілому або великих її частин, в той час, як алгоритмічні тести в першу чергу повинні перевіряти роботу окремих блоків або операторів програми.

    Типи тестів

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

    Вироджений тест

    Цей тест зачіпає роботу програми в самій мінімальному обсязі. Зазвичай тест служить для перевірки правильності виконання самих зовнішніх функцій програми, наприклад, звернення до неї і виходу з неї.

    Тест граничних значень

    Тест перевіряє роботу програми для граничних значень параметрів, що визначають обчислювальний процес. Часто для граничних значень параметра робота програми носить особливий характер, який, тим самим, вимагає і особливого контролю.

    Аварійний тест

    Тест перевіряє реакцію програми на виникнення різного роду аварійних ситуацій у програмі, зокрема, викликаних неправильними вихідними даними. Іншими словами, перевіряється діагностика, видавана програмою, а також закінчення її роботи або, може бути, спроба виправлення невірних вихідних даних.

    Крім автономних тестів, призначених для контролю окремих блоків програми, можна виділити стикувальні і комплексні тести.

    Стикувальні тести

    Призначаються для перевірки взаємозв'язку (стиковки) вже налагоджених частин програми.

    Комплексні тести

    Перевіряють правильність роботи всіх або більшості частин програми після їх об'єднання.

    Локалізація помилок

    Способи локалізації

    Після того, як за допомогою контрольних тестів (або якимось іншим шляхом) встановлено, що в програмі або в конкретному її блоці є помилка, виникає завдання її локалізації, тобто встановлення точного місця в програмі, де знаходиться помилка.

    Процес локалізації помилок складається з наступних трьох компонент:

    1. Одержання на машині тестових результатів.

    2. Аналіз тестових результатів і звірка їх з еталонними.

    3. Виявлення помилки або формулювання припущення про характер і місце помилки в програмі.

    За принципами роботи засоби локалізації поділяються на 4 типи:

    1. Аварійна друк.

    2. Друк у вузлах.

    3. Слідкування.

    4. Прокрутка.

    АВАРІЙНА ДРУК здійснюється один раз при роботі налагоджують програму, в момент виникнення аварійної ситуації в програмі, що перешкоджає її нормальному виконанню. Тим самим, конкретне місце включення в роботу аварійної друку визначається автоматично без використання інформації від програміста, який повинен тільки визначити список видаються на друк змінних.

    ДРУК У ВУЗЛАХ включається в роботу у вибраних програмістом місцях програми; після здійснення друку значень даних змінних продовжується виконання відлагоджує програми.

    Слідкування проводиться або по всій програмі, або на заданому програмістом ділянці. Причому стеження може здійснюватися як за змінними (арифметичне стеження), так і за операторами (логічне стеження). Якщо буде виявлено, що відбувається присвоювання заданої змінної або виконання оператора із заданою міткою, то проводиться друк імені змінної або мітки і виконання програми продовжується. Відмінністю від друку у вузлах є те, що місце друку може точно і не визначатися програмістом (для арифметичного стеження); відрізняється також і зміст друку.

    ПРОКРУЧУВАННЯ виробляється на заданих ділянках програми, і після виконання кожного оператора заданого типу (наприклад, присвоєння або поміченого) відбувається налагоджувальна друк.

    За типами друкованих значень (числові та текстові або меточние) кошти поділяються на арифметичні та логічні.

    Інтегрований відладчик Delphi

    Для роботи з вбудованим відладчиком Delphi 5 його інтегроване середовище розробки (IDE) пропонує цілу серію установок, яких практично вистачить для тестування і налагодження будь-якої задачі.

    Спочатку розгляну опції відладки:

    Рис. 2.6. Опції налагодження проекту

    Включення налагоджувальної інформації регулюється наступними установками:

    • Debug Information. Опція контролює включення налагоджувальної інформації. При відключенні цієї опції буде неможливо трасувати код або ставити крапки переривання в будь-якому модулі. Опція еквівалентна директивам компілятора $ D і $ DEBUGINFO

    • Local Symbols. Опція контролює включення інформації про локальних змінних, декларованих, наприклад, всередині функцій, процедур і розділу implementation. Еквівалентні директиви компілятора - $ L і $ LOCALSYMBOLS.

    • Symbol Info. Цю опцію можна цілком віднести до розряду налагоджувальних, так як її дія спрямована на броузер об'єктів, а не на вбудований відладчик. Якщо опція включена, броузер об'єктів зможе виводити інформацію для об'єктів, визначених у модулях. Опція ігнорується при виключених попередніх двох опціях Еквівалентні директиви компілятора - $ Y і $ REFERENCEINFO.

    Якщо модуль Delphi поширюється у вигляді DCU файлів (наприклад, VCL) необхідно подбати про те, щоб у скомпільованих модулях не містилася налагоджувальна інформація.

    Покрокова налагодження

    Одна з найбільш поширених завдань налагодження - виконання програми крок за кроком, по одному рядку за раз для перевірки правильності виконання. При покроковому проходженні коду відладчик виводить вікно редагування з виконуваної програмою. Точка виконання, показує наступну виконувану рядок програми, представляється у вигляді зеленої стрілки, розташованої ліворуч від області вихідного тексту у вікні редагування.

    Після успішної компіляції модуля на смузі налагоджувальної інформації кожен рядок коду, що внесла свій внесок у модуль, буде відзначена синім гуртком.

    Інтегроване середовище Delphi надає користувачеві декілька команд покрокової налагодження доступних у меню Run:

    Рис. 2.7. Засоби налагодження програми

    Нижче перерахую команди отладчика:

    • Run. Вибір цієї команди запускає додаток на виконання в звичайному режимі. Цю команду можна використовувати як для запуску програми, так і для продовження його роботи після якого-небудь переривання виконання (наприклад, по точці зупинки). Якщо включена опція Break on Exception, необхідно використовувати команду для продовження роботи після отримання повідомлення про виняткову ситуації.

    • Step Over. Коли точка виконання перебуває на рядку містить виклик процедури або функції, необхідно використовувати цю команду для виконання рядки, включаючи дзвінки один крок, без проходження окремих рядків викликаються функцій. Точка виконання переміщається при виконанні на наступний рядок.

    • Trace Into. На відміну від попередньої команди, ця опція відпрацює покрокову налагодження викликаються процедур і функцій. Іншими словами, якщо, наприклад, у рядку викликається якась процедура, то при виконанні цієї команди точка виконання перейде на перший рядок процедури. Однак якщо в рядку немає таких викликів, значить, останні дві команди ідентичні. Але, необхідно дотримуватися обережності - при покрокової трасуванні обробника події OnPaint потрібно перемальовування вікна програми, для чого викликається обробник події OnPaint. Виходить нескінченний цикл викликів одного і того ж обробника. Тим не менш, варто лишень простежити, щоб вікна програми та редактора не перекривалися.

    • Trace to Next Source Line. Іноді код викликає інший код побічно, наприклад, при виклику функції, яка запускає обробник події, або при виклику функції Windows API, яка, у свою чергу, запускає функцію непрямого виклику. Оскільки такі виклики непрямі, відладчик не бачить виклику і не відстежує покрокового виконання таких викликів. Однак використання описуваної команди призводить до відстеження таких викликів і останову отладчика на першому рядку спричиненої таким чином функції або процедури.

    • Run to Cursor. Дуже часто неможливо в пошуках помилки, місце розташування якої з якоюсь точністю відомо, покроково добиратися до потрібного місця через сотні, а то й тисячі рядків коду. У такому випадку можна просто помістити курсор на потрібний рядок програми у вікні редагування та команду Run to Cursor. Ці дії еквівалентні тимчасовому приміщенню точки зупину у необхідний рядок програми, і після виконання попереднього рядку коду робота програми припиняється.

    • Show Execution Point. Ця команда змушує середовище розробки відкрити вікно редактора і показати виконувану в даний час рядок програми.

    • Program Pause. Вибір цієї команди негайно зупиняє виконання програми. Команда особливо корисна при зациклення програми.

    • Program Reset. Команда негайно припинить виконання програми і відбудеться повернення в середу розробника.

    Запорукою успішного просування на ринку нового товару або нової послуги є всебічне ознайомлення зі структурою даного ринку, від його (ринку) вимог і можливостей. Досліджувана інформація стосується попиту і пропозиції конкурентів, а також очікувань конкретних споживачів. При цьому реалізація спрямованості товару на весь ринок у цілому найчастіше представляється нереальною, що можна пояснити помітною неоднорідністю ринку, припускає різні потреби окремих верств споживачів. Різниця в потребах може бути викликана різними причинами - соціальними, фінансовими, географічними і багатьма іншими. Стосовно до програмного забезпечення можна сказати, що різні організації і приватні особи використовують у своїй роботі різні комп'ютери і на даний момент, коли існує більше десятка усталених комп'ютерних платформ, було б не розумним намагатися охопити весь ринок цілком і тому ринок повинен бути сегментований, тобто поділений на однорідні частини-сегменти, в рамках яких споживач має подібні можливості і потреби.

    При розумному розподілі ринку на сегменти всі інструменти маркетингу усередині нього можуть бути оптимально скоординовані. Саме тому сегментація ринку вважається дуже важливим аспектом діяльності підприємства.

    Методика визначення сегментів ринку

    При первинній сегментації ринку доцільно виділити сегменти товарів споживчого попиту і виробничого призначення. Така класифікація важлива, оскільки підкреслює відмінності в характеристиках продуктів і наслідки для маркетолога.

    Для подальшого поділу ринку на сегменти можна скористатися різними критеріями залежно від наступних факторів:

    географічного положення споживачів (регіон, країна);

    типу споживача (величина підприємства, інтенсивність споживання, галузь, місце у виробничому процесі);

    типу процесу, для якого купується продукція (адміністративна діяльність, рух товару, виробничий процес);

    купівельного попиту (клієнт / потенційний клієнт, зв'язок з постачальником, частота і величина закупівель);

    На ринках збуту товарів широкого вжитку використовують інші критерії. Класичними є наступні показники:

    соціально-економічні (утворення, доходи);

    демографічні (вік, стать, склад сім'ї);

    географічні

    Проте слід враховувати, що всіх споживачів на ринку не так-то легко розділити по категоріях. Поведінка споживача останнім часом стає все більш диференційованим, виникають різні «стилі життя» всередині суспільства.

    Для формування сегментації ринку використовуються елементи таксономічного аналізу - побудова діаграм Чекановського [1]. Вихідним кроком, предопределяющим правильність кінцевих результатів, є оформлення матриці спостережень. Ця матриця містить найбільш повну характеристику досліджуваного безлічі об'єктів і має вигляд:

    X =

    де w - число об'єктів; n - число ознак; i k - значення ознаки k для об'єкта i.

    Ознаки, включені в матрицю, можуть бути неоднорідні, оскільки описують різні властивості об'єктів. Крім того, розрізняються одиниці їх вимірювання. Тому слід виконати попереднє перетворення, яке полягає в стандартизації ознак.

    Таблиця 1


    1

    2


    W

    1

    X

    -

    X

    -

    2

    -

    -

    -

    X

    ...

    ...

    ...

    ...

    ...

    W

    -

    X

    -

    X

    У наведеній невпорядкованою діаграмі черговість запису випадкова. На це вказує виразний розкид символів, що визначають різницю між досліджуваними елементами: найменше чисельне відстань - «C»; найбільшу відстань, тобто пари елементів, найбільш різняться між собою, - «-». Для їх лінійного впорядкування слід провести перегрупування знаків «C» і «-». Перегрупування повинна виконуватися таким чином, щоб знаки «X» виявилися якомога ближче до головної діагоналі діаграми. З цією метою рядки і стовпці таблиці переставляються до тих пір, поки не вийде упорядкована діаграма.

    Пошук сегментів ринку для програми посилки повідомлень

    Ринок даних програм досить вузький і спеціалізований. Програма призначена для полегшення роботи Інтернет-компаній, людей, які працюють в локальних мережах.

    Для проведення сегментації можна виділити наступні групи потенційних споживачів програм подібного рівня:

    Середні і великі промислові підприємства;

    Наукові центри;

    Інтернет-компанії;

    Учні та студенти;

    Невелика група користувачів;

    Тепер розглянемо характеристики даного програмного забезпечення:

    Поширеність апаратно-програмної платформи;

    Інтерфейс;

    Зручність роботи;

    Ціна.

    Тепер складемо таблицю спостережень, оцінивши в балах кожна ознака для кожного споживача за десятибальною шкалою.

    Параметри


    Споживачі


    Платформа


    Інтерфейс


    Зручність роботи


    Ціна

    Промислові підприємства

    1

    5

    9

    1

    Наукові центри

    7

    4

    8

    2

    Інтернет-компанії

    5

    7

    10

    10

    Учні та студенти

    1

    10

    6

    10

    Група користувачів

    2

    9

    10

    10

    X =

    ;

    ; ;

    ; ;

    ; ;

    ;

    Отже, ми отримали матрицю відстаней:

    С =

    Для отримання невпорядкованою діаграми Чекановського розбиваємо отримані значення на класи за правилом: якщо елемент менше 2.5, то на його місце ставиться «X», інакше нічого не ставимо.


    1

    2

    3

    4

    5

    1

    X

    X




    2

    X

    X




    3



    X


    X

    4




    X

    X

    5



    X

    X

    X

    Провівши перегрупування стовпців і рядків шляхом перестановки спочатку 4-го і 5-го шпальт, а потім таких же рядків, отримуємо впорядковану діаграму Чекановського:


    1

    2

    3

    5

    4

    1

    X

    X




    2

    X

    X




    3



    X

    X


    5



    X

    X

    X

    4




    X

    X

    У результаті ми виділили три сегменти - в одному з них розташовуються споживачі 1 і 2, в іншому - 3 і 5, в третьому - 5 і 4.

    Сегментація ринку призвела до таких результатів - були виділені три сегменти:

    Промислові підприємства і наукові центри;

    Інтернет-компанії та групи користувачів.

    Учні і студенти та групи користувачів.

    Для першої сегмента більш важливі вимоги до зручності роботи тому що даний сегмент займається наукомістким дослідженнями.

    Для другої групи більш важливими виявляються ціна, зручність інтерфейсу, а також доступність і поширеність програмно-апаратної платформи, тому що для дрібних малобюджетних організацій і груп користувачів можливість використання наявного парку машин класу IBM PC із встановленими на них операційною системою Windows'9 x, є хорошим стимулом для придбання даного програмного продукту.

    Додати в блог або на сайт

    Цей текст може містити помилки.

    Програмування, комп'ютери, інформатика і кібернетика | Диплом
    239.5кб. | скачати


    Схожі роботи:
    Програми для прийому і відправлення повідомлень
    Передача звуку по локальній мережі
    Розробка програми передачі даних через послідовний порт мікроконтролера
    Інформаційні характеристики систем передачі повідомлень
    Система передачі повідомлень при безперервній роботі SMTP-сервера
    Визначення основних характеристик цифрової системи передачі повідомлень методом імпульсної кодової
    Методика прийому самохідної пускової установки 9П129 та підготовки її до передачі
    Програми для при ма і відправки повідомлень
    Кадри з використанням програми Microsoft Access 97
    © Усі права захищені
    написати до нас