Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_UNIX_15_19_окт2004.doc
Скачиваний:
3
Добавлен:
27.04.2019
Размер:
478.72 Кб
Скачать

2.3 Приклад використання сокета

Взаємодію поміж процесами за допомогою сокетів можна продемонструвати на прикладі домена UNIX. Функціональність розподіленої системи у цьому разі полягає в тому, що клієнт надсилає серверові повідомлення, сервер переспрямовує його клієнтові, який і виводить його після отримання на термінал, оскільки у домені UNIX сокети дейтаграм практично не відрізняються від сокетів потоку. Як адресу сервера можна зазначити ім’я файла ./echo.server й припустити, що клієнти знають цю адресу. Сервер зв’язує створений сокет з цією локальною адресою і в такий спосіб реєструється в системі. З цього моменту він готовий до приймання та опрацьовування повідомлень. Сервер починає нескінченний цикл, очікуючи на повідомлення від клієнтів та блокуючись на виклику recvfrom(2). При отриманні повідомлення сервер надсилає його клієнтові, за допомогою виклику sendto(2). У додатку наведено програми серверної та клієнтської сторін. Клієнт створює сокет дейтаграм та зв’язує його зі своєю унікальною адресою, що зумовлюється унікальністю імені файла. Оскільки водночас можуть працювати кілька клієнтів, виникає проблема отримання унікального імені. Для її розв’язання використовується функція mktemp(3c), яка дозволяє за заданим шаблоном /tmp/clnt.XXXX та на підставі ідентифікатора поточного процесу отримати унікальне ім’я на заміну символів ХХХХ. Зв’язування сокета дозволяє при відправлянні неявно зазначати його “адресу відправника”, тому сервер може повернути повідомлення. У додатку Б (Лістинг1 та Лістинг 2) наведено вихідні тексти програм, що вони зреалізовують взаємодію поміж процесами, яка грунтується на сокетах дейтаграм у домені UNIX.

3 Контрольні запитання

1 Які комунікаційні характеристики забезпечують сокети?

2 Які основні типи сокетів зреалізовано в BSD UNIX?

3 Який системний виклик створює сокет та який він має опис?

4 Що таке комунікаційні домени та які домени Ви знаєте?

5 Який зв’язок існує поміж комунікаційними доменами та підтримуваними ними сокетами?

6 Якими параметрами схарактеризовується кожний комунікаційний канал?

7 Які системні виклики використовуються на серверному та клієнтському боці при створенні віртуального каналу з попереднім встановленням з’єднання?

8 Які системні виклики використовуються на серверному та клієнтському боці за взаємодії, яка грунтується на дейтаграмах?

9 Яку довжину і формати мають адреси сокетів у різних доменах?

10 Яку адресу слід обирати для сервера й чому?

4 Домашнє завдання

1 Коротко відповісти на контрольні запитання у письмовому вигляді.

2 Переписати тексти клієнтської та серверної частин програми, яка зорганізовує взаємодію процесів за протоколом UDP, та коментарі до них; тексти програм наведено у додатку Б (Лістинг1 та Лістинг2).

5 Лабораторне завдання

1 Підімкніться до комп’ютера під керуванням ОС UNIX за допомогою telnet (“Пуск\Виконати\telnet ip”, де ip — адреса машини під керуванням UNIX).

2 Після підімкнення введіть ім’я (login) та пароль (password) згідно з таблицею 5.1.

Таблиця 5.1 — Імена та паролі

login

st1

st2

st3

st4

st5

st6

st7

st8

st9

password

st1

st2

st3

st4

st5

st6

st7

st8

st9

login

st11

st12

st13

st14

st15

st16

st17

st18

st19

password

st11

st12

st13

st14

st15

st16

st17

st18

st19

3 Створіть текстові файли socketserver.c та socketclient.c, вихідні тексти програм цих файлів розміщено в додатку Б (Лістинг1 та Лістинг2).

4 Відкомпілюйте програми та створіть об’єктні файли:

сс -о socketserver socketserver.c

та

сс -о socketclient soketclient.c

5 Якщо все пройшло успішно, на першому терміналі запустіть виконуваний файл ./socketserver, а на другому — ./socketclient.

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

7 Змініть текст повідомлення на своє прізвище, ім’я та побатькові.

8 Знову відкомпілюйте програми та виконайте пункти 4...6 даного завдання.

9 Змоделюйте ситуацію в такий спосіб, щоби серверна частина програми видала поодинці усі повідомлення про помилки.

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

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

12 Зробіть висновки й запишіть їх до протоколу.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]