3. Аналіз методів рішення задачі
3.1 Постановка задачі. Та її компоненти
Прикладний програмний інтерфейс платформи Win32 має хороші можливості для створення мережених програм. В операційній системі Windows наявна бібліотека, яка надає можливість працювати з базовою технологією передачі даних – сокетами. Сокети – програмні інтерфейси взаємодії програм. На базі сокетів спроектовано величезну кількість програм для роботи з мережею та написано багато бібліотек, які слугують «обгортками» для сокетів, щоб абстрагуватися від деталей реалізації передачі даних.
Сокети побудовані на концепції «клієнт-сервер». Тобто одна машина (програма) виступає в ролі сервера, яка надає (виконує) сервіс, а інша в ролі клієнта, що дає запит серверу на виконання тих чи інших операцій. Все це добре інкапсульовано в потужних бібліотеках роботи з мережею, які дають можливість будувати потужне програмне забезпечення. Крім того, на базі сокетів працюють найпоширеніші протоколи 7-го (прикладного) рівня моделі OSI, такі як ftp, http, smtp, pop3 і т.д.
Розгляну передачу даних по протоколу TCP\IP, тобто дані будуть передаватися зі встановленням з'єднання. Для цього я використовою функції API платформи Win32. Спочатку розгляну сам алгоритм передачі даних. Оскільки дані передаються від машини до машини, то одна з них має виступати сервером (на ній повинна стояти серверна частина програми), а інша клієнтом (на ній має знаходитись клієнтська частина програми). Оскільки клієнт надсилає інструкції, а сервер приймає повідомлення від клієнта і виконує команди, то алгоритми роботи сервера і клієнта відрізняються.
Що собою представляють сервер та клієнт:
Сервер.
1. Ініціалізація бібліотеки.
2. Створення сокету.
3. Заповнення структури параметрами сервера.
4. Асоціювання сокету зі структурою.
5. Прослуховування порту.
6. Прийняття підключення клієнта.
7. Отримання даних (інструкцій) від клієнта.
8. Закриття сокету.
Клієнт.
1. Ініціалізація бібліотеки.
2. Створення сокету.
3. Заповнення структури параметрами сервера.
4. З’єднання з сервером.
5. Відсилання даних (інструкцій) серверу.
6. Закриття сокету.
Ініціалізація бібліотеки потрібна для того, щоб завантажити необхідну її версію. Далі створюється сокет (програмний інтерфейс взаємодії). Через ці сокети відбувається обмін інформацією між клієнтом і сервером. Потім заповнюється відповідна структура з параметрами з’єднання.
На сервер кладеться відповідальність за прослуховування порту (чи не хоче до нього звернутись клієнт…). Якщо такий клієнт є, то сервер повинен дозволити підключитись клієнту. Далі сервер отримує від клієнта дані (інструкції). Після отримання інструкцій, сервер виконує їх.
Клієнт зі своєї сторони робить наступні дії. Пробує з’єднатися з сервером. Після вдалої спроби він відсилає інструкції серверу. Потім чекає відповіді від сервера. Після цього обидві сторони закривають з’єднання.
Коли присутні декілька клієнтів та один сервер, дії виконуються принципом черги, коли кожний із клієнтів звертається із запитом до сервера, сервер виконує цей запит, видає результат, обробка інформації була проведена і до черги записується новий клієнт, «обслуговується». При такій системі опрацювання значно зменшується ризик розриву із сервером, це особливо має значення для мережевих з’єднань.
3.2 Функції та структури, які беруть участь реалізації алгоритму передачі даних
Перша функція – функція завантаження бібліотеки. Прототип:
int WSAStartup(
WORD wVersionRequested,
LPWSADATA lpWSAData
);
Параметр wVersionRequested (in) – версія бібліотеки, яку потрібно завантажити. Молодший байт визначає основну версію, старший – доповняльну.
Параметр lpWSAData (out) – інформація про завантажену бібліотеку.
Функція повертає нуль у разі успішного завантаження. Інакше – код помилки.
Після того, як необхідна версія бібліотеки завантажена, необхідно створити сам сокет. Функція, що відповідає за створення сокету має наступний прототип:
SOCKET socket(
int af,
int type,
int protocol
);
Параметр af (in) - визначає сімейство адрес, що використовуватимуться при передачі даних через сокети. Найчастіше використовується значення параметру AF_INET = 2. Інші варіанти параметру розглядати не будемо.
Параметр type (in) - визначає тип створюваного сокету. Найчастіше використовується значення SOCK_STREAM. Даний параметр означає, що використовувати протокол із сімейства TCP при передачі даних. При з’єднані по сімейству протоколів UDP використовується значення SOCK_DGRAM.
Параметр protocol (in) - визначає сам протокол, що буде використовуватися при передачі даних. В даному випадку використовуватимемо значення IPPROTO_TCP.
Функція повертає дескриптор створеного сокету.
Далі потрібно занести дані, що визначають основні параметри підключення, в спеціальну структуру. Структура виглядає так:
struct sockaddr_in{
short sin_family;
unsigned short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
Параметри:
sin_family
Визначає сімейство адрес. Повинен бути AF_INET.
sin_port
Визначає порт IP.
sin_addr
Визначає адресу IP.
sin_zero
Параметр не заповнюється. Визначає розмір структури SOCKADDR.
Після заповнення структури необхідно асоціювати її з сокетом сервера, який повинен приймати через нього дані.
int bind(
SOCKET s,
const struct sockaddr* name,
int namelen
);
Параметр s (in) - сокет, який асоціюється зі структурою.
Параметр name (in) - сама структура, з якою асоціюється сонет.
Параметр namelen (in) - розмір попереднього параметра в байтах.
Функція в разі успіху повертає нуль. В іншому разі – код помилки.
Далі сервер має прослуховувати порт. Здійснюється це за допомогою наступної функції:
int listen(
SOCKET s,
int backlog
);
Параметр s (in) – сокет, який переводиться в режим прослуховування.
Параметр backlog (in) – максимальна кількість підключень до сервера.
Функція в разі успіху повертає нуль. В іншому разі – код помилки.
Після того, як знайдеться клієнт, який хоче підключитись до сервера, сервер приймає підключення. Здійснюється це наступною функцією:
SOCKET accept(
SOCKET s,
struct sockaddr* addr,
int* addrlen
);
Параметр s (in) – сокет, який приймає підключення.
Інші два параметри – вихідні і нас не дуже стосуються. Їх можна виставити в NULL.
Функція повертає дескриптор сокету, що прийняв підключення. В разі невдачі повертає код помилки.
Якщо клієнт підключився до сервера, то сервер може отримувати від клієнта дані або інструкції для дій. Для цього існує наступна функція:
int recv(
SOCKET s,
char* buf,
int len,
int flags
);
Параметр s (in) – сокет, через який передаються дані.
Параметр buf (out) – буфер даних.
Параметр len (in) – величина буферу вхідних даних даних, в байтах.
Параметр flags (in) – спеціальний флаг, який можна встановити в нуль.
Функція, в разі успіху, повертає кількість прийнятих байт. Інакше – код помилки.
Після виконання операцій з’єднання можна закрити. Для цього існує наступна функція:
int shutdown(
SOCKET s,
int how
);
Параметр s (in) – сокет.
Параметр how (in) – можна виставити в SD_BOTH. Інші значення розглядати не будемо.
Функція в разі успіху повертає нуль. В іншому разі – код помилки.
І вкінці кінців, потрібно закрити сокет. Це робить функція:
int closesocket(
SOCKET s
);
Єдиний вхідний параметр s – сокет, який треба закрити.
Функція в разі успіху повертає нуль. В іншому разі – код помилки.
Зі сторони клієнта необхідно також виконати три перших етапи. Після завантаження бібліотеки, створення сокету та заповнення даними структури, що асоціюється із сонетом, клієнт повинен з’єднатися з сервером. З’єднання відбувається за допомогою функції:
int connect(
SOCKET s,
const struct sockaddr* name,
int namelen
);
Функція приймає вхідні параметри:
Параметр s (in) – сокет, через який клієнт з’єднується з сервером.
Параметр name (in) – ім’я сокету, вказаного в структурі sockaddr, до якого буде під’єднуватися клієнт.
Параметр namelen (in) – розмір структури, в байтах.
Після з‘єднання клієнт може відправляти серверу інструкції (дані). Функція, що здійснює цю операцію, має прототип:
int send(
SOCKET s,
const char* buf,
int len,
int flags
);
Параметри мають такі ж значення, як і в раніше розглянутій функції recv.
Опціонально, клієнт може отримувати результат від сервера. Наприклад, клієнт може бути сповіщений про будь-який крок виконання дій вищерозглянутими функціями – успішне або невдале їх виконання.
Після завершення всіх операцій з’єднання і сокет потрібно закрити. Ці функції я вже розглядав вище.
Було б доцільно згадати про те, що всі вищенаведені функції працюють із першої версії бібліотеки. Але можуть бути використані і в наступних версіях, так як підтримуються розробниками. В другій версії можна використовувати більш «продвинуті» функції, які мають більші можливості. Ці функції відрізняються приставкою WSA та кількістю параметрів.
4. Технічні засоби, що використовуються у програмі
Для коректної роботи програми необхідна наступна конфігурація хоча б двох комп’ютерів :
1. Процесор - довільний.
2. Жорсткий диск більше 2 Гбайт.
3. Тип монітору - позамовчуванню.
4. Розширення екрана, 32-бітна палітра кольорів(клієнт частина).
5. Об’єм оперативної пам’яті - 64MB.
6. Наявність клавіатури , миші, CDROM.
7. Зєднання по локальній або глобальній мережі.
8. OS: Windows XP, Windows 2000, , Windows 98, Windows7.
Щоб викликати дану програму необхідно встановити клієнтську частину на одно із комп’ютерів, та серверну частину на іншому. Дізнатись IP адресу чи LAN нажавши «властивості» на мережеве зєднання, або набравши команду ipconfig в «запуск програм».
Серверна програма при запуску завантажується у оперативну пам’ять та в подальшому не потребує підкачки ресурсів, подальші функції програми будуть здійснюватись безпосередньо напряму із командами ОС.
Клієнтська програма завантажується відповідно до потреб користувача, та зв’язується в подальшому із сервером через апаратні пристрої.
... , що вхідна мова і системне забезпечення такого пакету можуть бути достатньо легко реалізовані силами прикладного програміста. Тому у разі, коли подібний пакет задовольняє конкретних користувачів, його розробка є цілком виправданою. 3. ВИСНОВОК Сучасний український ринок прикладного програмного забезпечення є, значною мірою, ринком піратського ПО. Це пов'язано з тим, що український спожива
... на базі великих ЕОМ і централізованої обробки інформації. Починають створюватися інформаційні системи для управління окремими підрозділами чи видами діяльності, які з часом інтегруються в комплексні автоматизовані системи. Перші автоматизовані системи керування запасами в промисловому виробництві ґрунтувалися на розрахунках, виходячи зі специфікації складу виробу (Bill of Materials). За планом ...
... . Таким чином, вивчення особливостей поведінки чотирикомпонентних сумішей полімерів є важливим і тема роботи актуальна. Метою дипломного проекту є створення програмного забезпечення для оптимізації складу чотирикомпонентних нанонаповнених сумішей полімерів, яке дозволить визначати полімерні композиції для отримання виробів з покращеними властивостями. Для досягнення поставленої мети потрібно вирі ...
... замінено на /2. Покладемо ,, k=k+1, j=1 та повернемося до першого кроку. Блок-схема алгоритму приведена нижче. Рисунок 2.4–Алгоритм Хука-Дживса 3. Розробка програмного забезпечення вирішення задачі формування портфеля цінних паперів 3.1 Загальні відомості про програмне забезпечення Розроблене програмне забезпечення призначене для автоматизації процесу формування портфелем цінних ...
0 комментариев