Delphi пишемо шаблон клієнт-серверного додатка

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

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

> Компоненти ClientSocket і ServerSocket. які ми будемо використовувати, знаходяться на вкладці Internet. Якщо на цій вкладці у Вас немає цих компонентів (а за замовчуванням при установці Delphi7 вони не ставляться), необхідно встановити їх самостійно (пакет dclsocketsXX.bpl). Даний пакет можна знайти на установчому диску Delphi7 (або в папці "C: \ Temp", куди розпаковується дистрибутив перед установкою - "C: \ Temp \ delphi7 \ install \ program files \ borland \ delphi7 \ bin") або можете його завантажити звідси . Щоб встановити даний пакет, запустіть Delphi7. Зайдіть в меню Component-> Install Packages. У вікні натисніть кнопку «Add» і вкажіть місце, де розташований пакет dclsocketsXX.bpl. Після цього тисніть ОК. Компонент на місці.

Сподіваюся все пояснив доступно =). А тепер приступимо до справи і почнемо ми з серверної частини. Для цього створимо проект і скинемо на форму компонент ServerSocket. В налаштуваннях компонента ServerSocket зазначимо таке:
Active = false
Name = ss
Port = 4321
ServerType = stNonBlocking

А також для зручності скинемо компонент Memo. в який будемо виводити всяку інфу. Дамо ім'я компоненту log.

Далі, для компонента ServerSocket визначаємо метод onClientConnect. щоб визначати момент підключення клієнтів. Вставимо наступний код:

А тепер визначимо метод onClientRead. в якому будемо обробляти одержувані повідомлення від клієнтів:

Визначимо метод onClientDisconnect. щоб фіксувати факт відключення клієнта:

На цьому з серверної частиною покінчено.

Приступимо до клієнтської частини. Для цього створимо новий проект, скинемо на форму компонент ClientSocket і таймер. В налаштуваннях компонента зазначимо таке:
Active = false
Name = сs
Port = 4321
ClientType = ctNonBlocking
Address = 127.0.0.1

Тут також для зручності скинемо на форму компонент Memo. в який будемо виводити технічну инфу. Ім'я дамо відповідне log.

Для компонента ClientSocket визначаємо метод onError для того, щоб обробляти виключення, що виникли в момент підключення клієнта до сервера. Вставимо наступний код:

Тепер визначимо метод onConnect. Вставимо наступний код:

І щоб фіксувати момент втрати зв'язку з сервером, визначимо метод onDisconnect:

Таймер налаштуємо так:
Enabled = true
Name = te
Interval = 5000

І визначаємо метод onTimer. Вставимо наступний код:

Даний код перевіряє наявність з'єднання з сервером і в разі його відсутності намагається його встановити.
І кожні 5 секунд відправляє серверу повідомлення «ping client».

Ось приблизно так виглядає типовий шаблон додатки «клієнт-сервер».

Примітка
Хотів би звернути увагу на обробник onError тих, хто раніше не знав як позбутися від злощасного повідомлення - «Asynchronous socket error 10061». виникає при спробі здійснення підключення до сервера, який недоступний.

Update: Тут були деякі посилання на скачування, але вони стали битими. На прохання можна спробувати відновити.
Update 2: На жаль, такої можливості на даний момент вже немає.

Схожі статті