Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ППуКМ / Labs 1-7 / Лабораторна робота №1.doc
Скачиваний:
17
Добавлен:
18.03.2016
Размер:
152.06 Кб
Скачать

Лабораторна робота №2

Тема: Поштові скриньки. Іменовані канали

  1. Теоретичні відомості

    1. Поштові скриньки

В Microsoft Windows реалізований простий однонапрямлений механізм зв’язку, який називається поштовими скриньками. Поштова скринька – це файл, який створюється в оперативній пам’яті комп’ютера програмою-сервером. Поштові скриньки дозволяють клієнтському процесу передавати повідомлення одному або декільком серверним процесам. Розробка програм, які використовують поштові скриньки не вимагає знань транспортних протоколів, таких як TCP/IP або IPX. Разом з тим поштові скриньки не гарантують надійної передачі даних, оскільки основані на архітектурі широкомовлення, але вони є корисними, коли доставка даних не є життєво важливою.

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

\\сервер\Mailslot\[шлях]ім’я , де:

\\сервер – ім’я сервера;

\Mailslot – фіксований обов’язковий рядок, що показує, що це – поштова скринька;

\[шлях]ім’я – дозволяє програмам унікально ідентифікувати ім’я поштової скриньки.

Рядок Mailslot може являти собою крапку (.) – локальний комп’ютер, зірочку (*) – усі комп’ютери локальної мережі, ім’я домена або сервера.

Усі API-функції Win32, що використовуються при розробці клієнтів та серверів поштових скриньок (за винятком CreateFile та CreateMailslot), у випадку невдачі повертають 0. API-функції CreateFile та CreateMailslot повертають значення INVALID_HANDLE_VALUE у випадку невдачі.

      1. Сервер поштової скриньки

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

  1. Створити описувач поштової скриньки за допомогою API-функції CreateMailslot;

  2. Отримати дані від будь-якого клієнта шляхом виклику функції ReadFile з описувачем поштової скриньки у якості параметра;

  3. Закрити описувач поштової скриньки за допомогою API-функції CloseHandle.

Наведемо опис даних функцій:

HANDLE CreateMailslot(

LPCTSTR lpName,

DWORD nMaxMessageSize,

DWORD lReadTimeout,

LPSECURITY_ATTRIBUTES lpSecurityAttributes)

lpName – задає ім’я поштової скриньки (наприклад \\.\Mailslot\slots\mymailslot);

nMaxMessageSize – задає максимальний розмір повідомлення в байтах, яке може бути записане в поштову скриньку. Якщо 0, то приймаються повідомлення будь-якого розміру;

lReadTimeout - задає час (в мілісекундах), протягом якого операції читання чекають вхідних повідомлень. Значення MAILSLOT_WAIT_FOREVER дозволить заблокувати операції читання і примусить чекати, поки вхідні дані не будуть доступні для читання. Якщо 0 – операції читання повертаються негайно.

LpSecurityAttributes – визначає права доступу. Повинен бути NULL.

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

BOOL ReadFile(

HANDLE hFile,

LPVOID lpBuffer,

DWORD nNumberOfBytesToRead,

LPDWORD lpNumberOfBytesRead,

LPOVERLAPPED lpOverlapped);

hFile – описувач, який повертає функція CreateMailslot;

lpBuffer та nNumberOfBytesToRead – визначають, скільки даних може бути зчитано з поштової скриньки;

lpNumberOfBytesRead – повертає кількість фактично зчитаних байт по завершенню функції ReadFile;

lpOverlapped – дозволяє зчитувати дані із поштової скриньки асинхронно. Використовує механізм перекритого вводу-виводу.