Лабораторна робота №3. Обмін повідомленнями на базі мережних компо нентів Delphi 1 Постановка завдання Використовуючи стандартні компоненти середовища Delphi Tclientsocket icon

Лабораторна робота №3. Обмін повідомленнями на базі мережних компо нентів Delphi 1 Постановка завдання Використовуючи стандартні компоненти середовища Delphi Tclientsocket




Скачати 140.87 Kb.
НазваЛабораторна робота №3. Обмін повідомленнями на базі мережних компо нентів Delphi 1 Постановка завдання Використовуючи стандартні компоненти середовища Delphi Tclientsocket
Дата21.02.2014
Розмір140.87 Kb.
ТипЛабораторна робота
1. /1 Лабораторна робота.doc
2. /2 Лабораторна робота.doc
3. /3 Лабораторна робота.doc
4. /4 Лабораторна робота.doc
Лабораторна робота №4. Передача повідомлень на базі бібліотеки Winsock 1 Постановка завдання
Лабораторна робота №3. Обмін повідомленнями на базі мережних компо нентів Delphi 1 Постановка завдання Використовуючи стандартні компоненти середовища Delphi Tclientsocket
Лабораторна робота №2. Основи діагностики мережі 1 Постановка завдання
1 Лабораторна робота №1 Дослідження витої пари

3 Лабораторна робота №3. Обмін повідомленнями на базі мережних компо-

нентів Delphi


3.1 Постановка завдання


Використовуючи стандартні компоненти середовища Delphi Tclientsocket,

Tserversocket, створити клієнт-серверну програму, що реалізує обмін повідомленнями між комп'ютерами, об'єднаними в локальну мережу, за протоколом TCP/IP в операційній системі Windows 9x/NT/2000.

У звіті по кожній лабораторній роботі студентом представляються: на-

зва, постановка завдання, блок-схема алгоритму, текст програми,

результати роботи зі скриншотами програми, вивід.


3.2 Теоретична довідка


Виконання даної лабораторної роботи засноване на технології соке-

тов (sockets). Сокет – це інтерфейс прикладного програмування для мереж-

них додатків в операційній системі Unix. Пізніше інтерфейс було переве-

дено в Windows. Його основним призначенням є надання можливос-

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

Існує три основні типи сокетов:

клієнтські сокети ініціалізуються з боку клієнта. Для того,

щоб відкрити з'єднання, клієнтський сокет повинен «знати» ім'я або Ip-Адресу

сервера й номер порту, використовуваний серверним сокетом. Клієнт посилає

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

їх по мірі вступу;

серверні сокети встановлюють з'єднання із клієнтським сокетом

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

сокет одержує опис серверного сокета, після чого з'єднання вважається

установленим;

слухаючі сокети створюються сервером і ухвалюють повідомлення після

запиту на з'єднання.

Процес обміну даними між сокетами може відбуватися у двох

режимах: у блокувальному й неблокувальному. При блокувальному режимі про-

грама чекає виконання якої-небудь події. При неблокувальному – усі дії

виконуються паралельно.

Сокету для роботи необхідно вказати три параметри: Ip-Адресу, зв'язану

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

даними; протокол, за якім буде працювати створений сокет.

Ip-Адреса – це 32-бітна адреса, використовувана для ідентифікації вузла

у мережі. Кожний вузол мережі повинен мати унікальну Ip-Адресу, що полягає з

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

ся в точечно-десятковому форматі (наприклад, 192.168.144.232).


13


Порти, використовувані сокетами, є програмними й застосовують-

ся в Windows на мережному рівні. У комп'ютері десятки тисяч портів з них

кілька сотень використовуються системою, інші – як правило вільні й

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

ну інформацією між клієнтом і сервером. Клієнтові й серверу необхідно

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

приходити різними порціями від різних клієнтів.

Протокол – це набір правил і угод для передачі даних по мережі. Такі правила

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

якими обмінюються мережні пристрої. Існує безліч протоколів:

TCP/IP (Transmission Control Protocol/Internet Protocol),

UDP (User Datagramm Protocol), IPX/SPX (Internetwork

Packet Exchange/Sequenced Packet Exchange) і т.д. Стек TCP/IP містить набір

мережних протоколів Інтернету, що підтримують зв'язок між об'єднаними

мережами, що полягають із комп'ютерів різної архітектури й різними опера-

ційними системами. Також він містить у собі стандарти для зв'язку між

локальними комп'ютерами, яким призначаються Ip-Адреси, і угоди про

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

TCP/IP входить не потребуючий з'єднань транспортний протокол UDP. Він яв-

ляется ненадійним, але широко використовується в клієнт-серверних запитах і

програмах, у яких важлива швидкість обміну даними, наприклад при пере-

даванні інформації в інтерактивному режимі. У мережах Novell Netware использу-

ется стек протоколів IPX/SPX, який управляє адресацією й напрямком

передачі пакетів. Його основним недоліком є неможливість объеди-

нения мереж з різними протоколами.


3.3 Розробка інтерфейсу


Як приклад програми для обміну повідомленнями в лаборатор-

ных роботах №2 і №3 розглянемо програму, що представляє собою чат.


Малюнок 1 – Інтерфейс програми «Чат»


14



Додатковою вимогою при його розробці є простий і

зручний інтерфейс користувача, представлений на малюнку 1. Для реаліза-

ціі роботи чата необхідно помістити на форму наступні інтерфейсні

компоненти: поля для введення повідомлень, що посилають, і їх відображення; рядка

для введення імені користувача й Ip-Адреси сервера; кнопки «Створити сервер»,

«Приєднання до сервера», «Послати повідомлення» і «Вихід».

На другому етапі відбувається обробка подій на натискання користувачем яких-небудь кнопок. У нашім прикладі при натисканні на кнопку «Створити

сервер» програма буде перевіряти введення імені. Якщо воно не введене, то ви-

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

події, інакше виконуються дії для створення сервера. При натисканні на

кнопку «Приєднання до сервера» відбувається перевірка на введення Ip-Адреси

сервера й імені користувача. Якщо перевірка пройшла вдало, то програма

використовує функції й процедури для підключення до сервера по заданому IP-

адресі, інакше видає відповідне повідомлення. Кнопкою «Послати повідомлення», набраний текст відправляється серверу. При натисканні кнопки «Вихід»

програма завершує роботу.


3.4 Клієнт-Серверна модель передачі даних



Блок 1 -


Серверна частина


Блок 2 – Клієнтська


частина


Визначення

властивостей Port

і Servertype


Відкриття сервер-

ного сокета (Open)

(Open)


Очікування підключення

клієнта


Установлення каналу


Визначення

властивостей Port

і Address


Відкриття клієнт-

ського сокета

(Open)


Підключення до сервера



Відправлення з-

спілкування

(Sendtext)


Приймання повідомлення (Re-

ceivetext)


Запит


Відгук


Приймання повідомлення

(Re-

ceivetext)


Відправлення з-

спілкувань

(Sendtext)



Малюнок 2 – Структура клієнт-серверної программи


15



связи

Запуск со-




Для реалізації поставленого завдання необхідно створити клієнтське й

серверний програма. Їхня структура на основі стандартних компонентів Tcli-

entsocket і Tserversocket представлено на малюнку 2.


3.4.1 Реалізація клієнтської частини


Для того, щоб створити мережний клієнтський програма, що працює по

протоколу TCP/IP, необхідно використовувати компонент Tсlientsocket. Кожний

такий компонент працює з об'єктом Tсlientwinsocket і використовує його події й методи. Основні етапи роботи клієнтського сокета полягають у наступному

: визначення потрібного сервера; установлення зв'язку із сервером; отримання інформації про з'єднання; обмін даними із сервером; закриття з`єднання

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

ім'я або адресу сервера й номер порту. Ім'я задається у властивості Host, а Ip-Адреса в

властивості Address. Якщо задано обидва значення, то перевага віддається імені

комп'ютера. Для того, щоб клієнт-серверна програма працювала на локальній машині

необхідно призначити Ip-Адресу . Або властивості Host

призначити значення Localhost. Адреса порту задається у властивості Port і неявним

образом у властивості Service. Якщо задано обидва значення, використовується ім'я служ-

би. Після завдання цих параметрів, потрібно відкрити з'єднання, викликавши метод

Open. Щоб з'єднання встановлювалося автоматично, при завантаженні про-

грами, необхідно у властивості Active задати значення True. Після з'єднання,

властивість Socket об'єкта Tclientwinsocket сервера зберігає інформацію про клієнта.

З'єднання з боку клієнта завершується після виклику методу Close.

Сервер також може закрити з'єднання, у цьому випадку в клієнтському сокеті

ініціюється подія Ondisconnect.


3.4.2 Реалізація серверної частини


Сервер виконує наступні завдання: слухає зазначений порт; оброблює запити на підключення; обмінюється даними із клієнтом; закриває з'єднання.

Для створення сервера вибираємо з панелі Internet компонент

Tserversocket і поміщаємо на форму програми. У процесі роботи буде ви-

користуватися один екземпляр об'єкта Tserverwinsocket, необхідний для про-

слуховуванняя порту й по одному екземпляру Tserverclientwinsocket для кожного

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

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

задається у властивості Port або неявним образом, при виборі служби у властивості

Service. Почати прослуховування порту під час виконання програми можна,

викликавши метод Open. Якщо у властивості Active указати значення true, то при запуску

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

одержуємо із властивості Tserversocket.Socket.


16


Об'єкти, що обслуговують активні з'єднання, розміщуються у властивості Con-

nections. Використовуючи властивість Activeconnections, у якій вказується загальне

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

Connections по індексу. Значення індексу змінюється від 0 до Activeconnec-

tions-1.

Серверні з'єднання закриваються методом Close. При цьому завершу-

ються всі відкриті й слухаючі з'єднання. Якщо клієнт самостійно

припиняє зв'язок із сервером, то в серверному сокеті відбудеться подія Oncli-

entdisconnect.


3.4.3 Передача й приймання повідомлень


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

ходити асинхронно й не зупиняти виконання програмного коду. В

клієнтського сокета властивість Clienttype повинна мати значення ctnonblocking,

а в серверного сокета властивості Servertype потрібно привласнити значення stnon-

Blocking.

Для передачі повідомлень служать функції Sendtext і Sendbuf:

Функція Sendtext посилає текстове повідомлення s через сокет:


function Sendtext (const s: string): integer,


де s - передане повідомлення.

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


Функція Sendbuf посилає буфер через сокет. Буфером може бути

будь-який тип, наприклад структура (record) або integer:


function Sendbuf (var buf; bufsize: integer; flags: integer): integer,


де buf - передані дані;

bufsize – розмір даних, призначених для передачі;

flags – параметр передачі даних (рекомендується дорівняти до нуля).

значення, що вертається, – кількість відісланих байт, у випадку помилки

результат рівний –1.


Приклад передачі даних1):

Для клієнтської частини

Var s:string;

Begin

clientsocket1.Socket.Sendtext(s);


End;

Для серверної частини

Var s:string;

i:integer;

Begin

for i:=0 to serversocket1.socket.activeconnections -1 do

serversocket1.socket.connections[i].Sendtext (s);

End;


Для одержання повідомлень використовуються функції Receivetext і Re-

ceivebuf:

Функція Receivetext одержує повідомлення у вигляді текстового рядка й ви-

кликається без параметрів:


function Receivetext: string.


Ця функція повертає отриманий рядок.


Функція Receivebuf одержує повідомлення через буфер. Як і у функції

Sendbuf, буфером функції Receivebuf може бути будь-який тип:


function Receivebuf(var buf; bufsize: integer; flags: integer): integer,


де buf – отримані дані;

bufsize – розмір прийнятих даних;

flags – параметр передачі даних (рекомендується прийняти рівним 0).

значення, що вертається, – кількість отриманих байт, у випадку помилки результат рівний –1.


Довідатися розмір отриманих даних можна, викликавши наступну функ-

цію:

function Receivelength: integer.


значення, що вертається, – кількість отриманих байт.

Коли на порт, що прослуховується приходить інформація, пере-

дана віддаленим комп'ютером, викликається подія Onclientread, тому

функції, призначені для одержання даних, необхідно розташовувати в

оброблювачі цієї події.


Приклад приймання даних:

Для клієнтської частини

procedure Tform1.Clientsocket1Read(Sender: Tobject;

Socket: Tcustomwinsocket);

Var s:string;

Begin


18

s:=socket.Receivetext;

//Вивід тексту на екран

End;

Для серверної частини

procedure Tform1.Serversocket1Clientread(Sender: Tobject;

Socket: Tcustomwinsocket);

Var s:string;

Begin

s:=socket.receivetext;

//Пересилання даних іншим клієнтам

End;


3.5 Рекомендації й зауваження


Методів організації роботи сокетів досить, наприклад, файлові

потоки (Tfilestream) або потоки в пам'яті (Tmemorystream). Потоки – це ка-

нал для обміну даними, робота з яким аналогічна роботі зі звичайним фай-

лом. Тому цей механізм зручно використовувати при пересиланні файлів біль-

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

ровать правильність передачі не потрібно.

Крім компонентів Tclientsocket і Tserversocket для створення клієнт-

серверної програми можна в якості альтернативного варіанта використовувати стандартні компоненти з панелі Fastnet (Tnmmsg і Tnmmsgserv), In-

dyclients (Ittcpclient), Indyservers (Ittcpserver). Два останніх компоненти

поставляються з Delphi 6.


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


2.6.1 Що таке сокет, і які існують типи сокетов?

2.6.2 Для чого необхідний Ip-Адреса?

2.6.3 Який головний недолік протоколу IPX/SPX?

2.6.4 Описати структуру клієнт-серверної програми?

2.6.5 Який компонент використовується для створення клієнта?

2.6.6 Який протокол може використовуватися для обміну даними без підтвер-

дження про приймання?

2.6.7 Перевірити правильність присвоєння значення властивості об'єкта:

Serversocket1.Address := ‘14423-2’;

2.6.8 Яка властивість серверного сокета одержує дані про активні й

слухаючі з'єднання?

2.6.9 Що означає наступний запис: Clientsocket1.Clienttype := ctblocking?


19

Схожі:

Лабораторна робота №3. Обмін повідомленнями на базі мережних компо нентів Delphi 1 Постановка завдання Використовуючи стандартні компоненти середовища Delphi Tclientsocket iconПрограма предмет: «Об’єктно орієнтоване програмування» Спеціальність: радіофізика I електроніка
Середовище об'єктно-орієнтованого програмування. Установка Delphi. Запуск Delphi
Лабораторна робота №3. Обмін повідомленнями на базі мережних компо нентів Delphi 1 Постановка завдання Використовуючи стандартні компоненти середовища Delphi Tclientsocket iconDelphi-1

Лабораторна робота №3. Обмін повідомленнями на базі мережних компо нентів Delphi 1 Постановка завдання Використовуючи стандартні компоненти середовища Delphi Tclientsocket iconDelphi-4

Лабораторна робота №3. Обмін повідомленнями на базі мережних компо нентів Delphi 1 Постановка завдання Використовуючи стандартні компоненти середовища Delphi Tclientsocket iconDelphi-5

Лабораторна робота №3. Обмін повідомленнями на базі мережних компо нентів Delphi 1 Постановка завдання Використовуючи стандартні компоненти середовища Delphi Tclientsocket iconDelphi-3

Лабораторна робота №3. Обмін повідомленнями на базі мережних компо нентів Delphi 1 Постановка завдання Використовуючи стандартні компоненти середовища Delphi Tclientsocket iconDelphi-2

Лабораторна робота №3. Обмін повідомленнями на базі мережних компо нентів Delphi 1 Постановка завдання Використовуючи стандартні компоненти середовища Delphi Tclientsocket iconЛабораторна робота №9
Використовуючи крутильний маятник, визначити момент інерції тіла неправильної ґеометричної форми
Лабораторна робота №3. Обмін повідомленнями на базі мережних компо нентів Delphi 1 Постановка завдання Використовуючи стандартні компоненти середовища Delphi Tclientsocket iconЛабораторна робота №31
Використовуючи експериментально визначену температуру плавлення сплаву олова, розрахувати зміну ентропії в процесах нагрівання І...
Лабораторна робота №3. Обмін повідомленнями на базі мережних компо нентів Delphi 1 Постановка завдання Використовуючи стандартні компоненти середовища Delphi Tclientsocket iconЛабораторна робота №7 Постановка задачі
Задана дискретна лінійна стаціонарна детермінована математична модель з простором станів
Лабораторна робота №3. Обмін повідомленнями на базі мережних компо нентів Delphi 1 Постановка завдання Використовуючи стандартні компоненти середовища Delphi Tclientsocket iconЛабораторна робота №4 Постановка задачі
Дискретні моделі з простором станів, отримані в завданні 3 дослідити на керованість, спостережуваність та асимптотичну стійкість
Лабораторна робота №3. Обмін повідомленнями на базі мережних компо нентів Delphi 1 Постановка завдання Використовуючи стандартні компоненти середовища Delphi Tclientsocket iconЛабораторна робота №27 Визначення радіуса кривизни лінзи допомогою кілець Ньютона
Експериментально визначити радіус кривизни плоскоопуклої лінзи, використовуючи інтерференційну картину у вигляді кілець Ньютона
Додайте кнопку на своєму сайті:
Документи


База даних захищена авторським правом ©zavantag.com 2000-2013
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації
Документи