Розробка проекту «Чат для локальної та глобальної мережі» 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Розробка проекту «Чат для локальної та глобальної мережі»



Завдання. Створити програму «Чат для локальної та глобальної мережі», яка обробляє клієнтські запити.

ХІД РОБОТИ

1. Створити папку С:\Delphi\lab_12.

2. Створити новий проект.Присвоюємо властивості Caption форми значення Чат.

3. Розмістити на формі компоненти MainManu з вкладкиStandart палітри компонентів і створимо меню.

Присвоїмо властивості Name пунктів меню З’єднання наступні значення: Створити - create1; З’єднати - connect1; Роз’єднати - disconnect1. Властивості Enabled пункту меню З’єднання – Роз’єднати присвоюємо значення false, щоб зробити цю команду недоступною.

4. Розмістимо на формі компонент Memo і встановити цьому компоненту властивості за табл. 1.

Таблиця 1

Властивість (Properties)/ Подія (Events) Значення властивості/ обробка події (тіло процедури обробки події)
Align AlTop
Name txt
Lines Вітаємо в чаті!
Readonly True

5. Нижче розмістимо компонент Edit і присвоїмо його властивостям значення, як в табл. 2.

Таблиця 2

Властивість (Properties)/ Подія (Events) Значення властивості/ обробка події (тіло процедури обробки події)
Name sms
Text Очистимо поле

6. Справа від поля SMS розмістимо компонент Button і надамо його властивостям наступні значення (табл.3).

Таблиця 3

Властивість (Properties)/ Подія (Events) Значення властивості/ обробка події (тіло процедури обробки події)
Name send
Caption Відправити

7. Два важливих компоненти нашої програми, які будуть виконувати роль клієнта і сервера, знаходяться в палітрі компонентів на закладці Internet. Це компоненти TServerSocket та TClientSocket.

8. Для компонента ClientSocket змінимо значення властивості Port на 1945, Host – на 127.0.0.1, а Name – на Client. Для ServerSocket встановимо для властивості Port значення 1945, а для властивості Name – server. Форма набуде такого вигляду:

 

Розробка форми на настройок

9. Тепер створимо ще одну форму, яка буде служити для зміни настойок. Для цього виконаємо команду меню File–New–Form. В результаті чого з’явиться нова форма з іменем form2. присвоїмо її властивостям значення згідно табл. 4.

Таблиця 4

Властивість (Properties)/ Подія (Events) Значення властивості/ обробка події (тіло процедури обробки події)
Name Settings
Caption настройки

10. Розмістимо на формі три компоненти Label, три компоненти Edit та Button. Задано їхнім властивостям значення згідно таблиці 5.

Таблиця 5

Компонент Властивість (Properties)/ Подія (Events) Значення властивості/ обробка події (тіло процедури обробки події)
Label1 Caption Ім’я
Label2 Caption ІР сервера
Label3 Caption ІР клієнта
Edit1 Name name
Edit2 Name ips
Edit3 Name ipc
Button1 Caption встановити

В результаті форма набуде такого вигляду:

Розробка програмного коду

11. Для того, щоб користувач не вводив всі настройки кожен раз заново, будемо зберігати їх в INI-файлі. Для форми Settings оголосимо змінну path типу String і Win типу TIniFile:

Var

settings: Tsettings;

path:string;

win:TiniFile;

також для роботи з INI-файлами добавимо в розділ uses посилання на IniFiles:

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, IniFiles, StdCtrls;

Таке посилання необхідно добавити і в розділ uses головної форми програми. Змінимо також розділ var:

Var

Form1: TForm1;

win:TiniFile;

path, s, disco:string;

f:file of byte; i: integer;

ipc, ips, name:string;

 

12. Створимо обробник події OnClick для пункту меню Настройки:

procedure TForm1.N5Click(Sender: TObject);

begin

settings.ShowModal;

win:=TIniFile.Create(path); name:=win.ReadString('settings','name',name);

ips:=win.ReadString('settings','ips',ips);

ipc:=win.ReadString('settings','ipc',ipc);

win.Free;

end;

13. При натисненні кнопки встановити буде виконано запис запам’ятовування введених настройок:

procedure Tsettings.Button1Click(Sender: TObject);

begin

path:=getcurrentdir+'\settings.ini';

win:=TIniFile.Create(path); win.WriteString('settings','name',name.Text);

win.WriteString('settings','ips',ips.Text); win.WriteString('settings','ipc',ipc.Text);

win.Free;

close;

end;

 

14. Тепер розглянемо головну форму. Створимо для неї обробник події OnCreate:

procedure TForm1.FormCreate(Sender: TObject);

begin

path:=getcurrentdir+'\settings.ini';

if fileExists(path)=false

then begin

assignfile(f,path); rewrite(f); closefile(f);

win:=TIniFile.Create(path); win.WriteString('settings','name','Noname');

win.WriteString('settings','ips','127.0.0.1'); win.WriteString('settings','ipc','127.0.0.1');

win.Free;

end;

win:=TIniFile.Create(path);

name:=win.ReadString('settings','name',name); ips:=win.ReadString('settings','ips',ips);

ipc:=win.ReadString('settings','ipc',ipc); win.Free;

client.Host:=ipc;

end;

 

15. Тепер створимо обробник події onClick для пунктів меню З’єднання.

Для пункту Створити:

 

procedure TForm1.create1Click(Sender: TObject);

begin

server.Active:=true;

txt.Lines.Add('створюємо новий чат...');

create1.Enabled:=false; connect1.Enabled:=false; disconnect1.Enabled:=true;

send.Enabled:=true;

end;

Для пункту З’єднати:

procedure TForm1.connect1Click(Sender: TObject);

begin

Client.Host:=ips; Client.Active:=true; create1.Enabled:=false; connect1.Enabled:=false;

send.Enabled:=true; disconnect1.Enabled:=true;

end;

 

Для пункту Роз’єднати:

procedure TForm1.disconnect1Click(Sender: TObject);

begin

if Client.Active=true then Client.Active:=false else Server.Active:=false;

send.Enabled:=false; disconnect1.Enabled:=false;

create1.Enabled:=true; connect1.Enabled:=true; send.Enabled:=false;

end;

Тут ми спочатку перевіряємо, чи активний клієнт. Якщо так, то від’єднаємо його, в протилежному випадку від’єднаємо сервер. Як ви замітили, постійно йде активація/деактивація кнопки і пунктів меню. Це запобігає від помилок, які можуть виникнути при виборі команди Роз’єднати у випадку відсутності з’єднання або ж спроби відіслати повідомлення, коли ви знаходитись в чаті і т.д.

 

16. Для відправлення повідомлення потрібно натиснути кнопку Відправити або натиснути клавішу Enter. Обробник події OnClick для кнопки відправити:

procedure TForm1.sendClick(Sender: TObject);

begin

txt.Lines.Add(name+':'+sms.Text);

if Server.Active=true then

begin

Server.Socket.Connections[0].SendText(name+':'+sms.Text);

end

else

begin

Client.Socket.SendText(name+':'+sms.Text);

end;

sms.Clear;

end;

Тут ми перевіряємо, є ми сервером чи клієнтом, а потім відправляємо своє ім’я разом з повідомленням у відповідності з поставленою умовою.

 

17. Для того, щоб користувачу не приходилось тягнутися до мишки після кожної репліки, забезпечимо відправку повідомлення при натисненні клавіші Enter. Для того створимо для компонента smsобробник події OnKeyPress;

procedure TForm1.smsKeyPress(Sender: TObject; var Key: Char);

begin

if (key=#13) and (send.Enabled=true)then send.Click;

end;

 

18. Тепер залишилось обробити події клієнта і сервера. Для клієнта створимо обробник події OnConnect:

procedure TForm1.ClientConnect(Sender: TObject; Socket: TCustomWinSocket);

begin

Socket.SendText('!d1~'+name); txt.Lines.Add('Ви в чаті...');

end;

Подія клієнта OnDisconnect виникає при виході із чату або при роз’єднані:

procedure TForm1.ClientDisconnect(Sender: TObject;

Socket: TCustomWinSocket);

begin

Socket.SendText('!d2~'+name); txt.Lines.Add('Ви покинули чат...');

end;

19. Створимо для сервера обробник події OnClientRead:

procedure TForm1.ServerClientRead(Sender: TObject;

Socket: TCustomWinSocket);

begin

disco:=''; s:=Socket.ReceiveText;

if (s[1]='!')and (s[2]='d') and (s[3]='1') and (s[4]='~')

then begin

for i:=5 to length(s) do

disco:=disco+s[i];

txt.Lines.Add('В чат зайшов '+disco);

end;

if (s[1]='!')and (s[2]='d') and (s[3]='2') and (s[4]='~')

then begin

for i:=5 to length(s) do

disco:=disco+s[i];

txt.Lines.Add('Чат покинув '+disco);

end;

if (s[1]<>'!')and(s[4]<>'~') then txt.Lines.Add(s)

end;

 

20. Для сигналізації про помилки в обробниках подій OnError(для клієнта) і OnClientError(для сервера):

procedure TForm1.ServerClientError(Sender: TObject;

Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;

var ErrorCode: Integer);

begin

txt.Lines.Add('Виникла помилка...');

end;

procedure TForm1.ClientError(Sender: TObject; Socket: TCustomWinSocket;

ErrorEvent: TErrorEvent; var ErrorCode: Integer);

begin

txt.Lines.Add('Виникла помилка...');

end;

 

Обробник подіїOnDestory:

procedure TForm1.FormDestroy(Sender: TObject);

begin

if Client.Active= true then Client.Active:=false;

if Server.Active=true then Server.Active:=false;

end;

 

21. Зберегти проект у палці C:\Delphi\lab_l3.

22. Запустити проект та перевірити правильність його виконання.

 

Питання для самоконтролю:

  1. На основі чого реалізуються програми архітектури клієнт/сервер в Borland Delphi?
  2. Які компоненти використовуються для програмування клієнта та сервера?
  3. Яка властивість визначає тип серверу?
  4. Яка властивість визначає чи активний сервер чи ні?
  5. Яка подія виникає тоді, коли клієнт передав серверу будь-які дані?
  6. Яка властивість виникає тоді, коли клієнт встановлює сокетне зєднання і чекає відповіді від серверу?
  7. Який метод дозволяє відкриття сокету?
  8. Яка властивість визначає ІР-адресу компютера, до якого слід підключитися?

Лабораторна робота №14.

Тема: Створення аліасів в BDE та модуля даних.

Мета роботи: Навчитись створювати та записувати у файл конфігурації аліас бази даних. Навчитись створювати модуль даних бази даних Delphi та заносити його до репозиторію.

 

Завдання

1. Створіть аліас для вашої бази даних.

2. Використовуючи аліас відкрийте почергово всі три створені вами таблиці за допомогою команди File – Open – Table. Заповніть таблиці Покупець, Замовник та Товар записами по 10 покупців, 20 замовлень та 15 товарів (при цьому необхідно вибрати для таблиці режим редагування TableEdit Data).

3. Створіть модуль даних згідно описаної інструкції та внесіть його до репозиторію.

4. Модифікуйте таблицю Покупець додавши до неї поле Data_nar (Дата народження) і заповніть це поле таблиці.

5. Задайте вторинні індекси для таблиці покупець по полям Prizv та Imja.

6. Задайте паролі для таблиць.

7. Задайте максимальне значення для ціни товару.

8. Задайте маску введення для полів дати.

9. Задайте значення за замовчуванням для поля кількості замовлення.

10. Створіть новий проект

11. Створіть модуль даних згідно описаної інструкції

12. В розділі Uses головної форми додайте назву модулю даних, щоб він став доступним.

13. Розмістіть на формі компоненти TDBGrid та TDBNavigator. Налаштуйте ці компоненти на перегляд таблиці Покупець, Товар та Замовник. Вилучіть з таблиці стовпець Kod_Tovaru за допомогою редагування властивості Columns.

14. Змініть конфігурацію набору кнопок навігатора.

ХІД РОБОТИ

1. Створимо нову базу даних. Для цього виконаємо команду Object – New, після чого в діалоговому вікні вибору драйвера вказується значення STANDART. Після натискування кнопки Ok в списку з’являється новий елемент, помічений зеленим трикутником. Це означає, що реєстрація бази даних не завершена. За замовчуванням формується ім’я бази STANDART1, змінимо його на ім’я своєї бази даних, наприклад Торгівля. Переконаймося, що у властивості DEFAULT DRIVER (Драйвер за замовчуванням) стоїть значення PARADOX. У властивості PATH (Шлях пошуку для каталога, в якому зберігаються таблиці) вкажемо робочий каталог, наприклад D:\Student\IH46\BazaData\Data.

2. Тепер зареєстровану в системі BDE базу даних необхідно зберегти. Для цього в контекстному меню об’єкта Торгівля виберемо пункт Apply (Примінити настройки). На запитання про необхідність збереження змін дамо відповідь Yes. Якщо розкрити об’єкт Торгівля, клацнувши по значку “ + ” перед його іменем, на правій панелі SQL Explorer будуть показані всі три таблиці створеної нами бази даних, а значок бази помічається зеленою рамкою, що вказує, що база даних Торгівля відкрита. Робота з базами даних нагадує роботу з файлами. Їх спочатку потрібно відкрити а потім після виконання всіх операцій – обов’язково закрити. Після вивчення структури базу даних Торгівля потрібно закрити за допомогою команди Close контекстного меню. Виділення об’єкту буде знято. Тепер можна закрити вікно SQL Explorer і вернутися в середовище Delphi.

3. Створимо новий проект і додамо до нього модуль даних командою File – New – Data Module. На панелі модуля необхідно розмістити компоненти, що забезпечать доступ до потрібних нам трьох таблиць бази даних Торгівля. Для цього виберемо три компонента TТable та три компонента TDataSource.

4. Налаштуємо компоненти TTable. Для цього властивості DataBaseName присвоїмо з випадаючого списку псевдонім Торгівля. Після цього властивості TableName присвоїмо ім’я відповідної таблиці бази даних із списку. Для активізації таблиць потрібно встановити властивість Active в True. Властивість Name таблиць краще переіменувати в TPrizv, TTovar, TZamov відповідно.

5. Налаштуємо компоненти TDataSource. Для цього властивість DataSet зв’яжіть з відповідною таблицею, а Name переіменуйте в DataSourcePrizv, DataSourceTovar, DataSourceZamov відповідно.

6. Збережемо готовий модуль даних в Object Repository. Для цього клацніть правою кнопкою миші на модулі даних і виберіть Add to Repositoty (Додати до сховища). В полі Title (Назва) наберіть dmTorgivlja. В полі Description (Опис) – форма модуля даних для бази даних Торгівля. Виберіть Data Module із списку Pages і натисніть Ok. Тепер ваш модуль буде зберігатися в репозиторії на вкладинці Data Modules під іменем dmTorgivlja і його можна буде викликати з своїх проектів.

Для того щоб можна було звертатися з інших модулів до компонентів доступу до даних, що зберігаються в модулі даних проекту, необхідно включити ім’я файлу модуля даних в секцію uses

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

 

ТЕОРЕТИЧНІ ВІДОМОСТІ

Потужність і гнучкість Delphi при роботі с базами даних базується на низкорівневому ядрі – процесорі баз даних Borland Database Engine (BDE). Його інтерфейс з прикладними програмами називається Integrated Database Application Programming Interface (IDAPI). BDE дозволяє здійснюватися доступ до даним як з використанням традиційного record-орієнтованого (навігаційного) підходу, так і з використанням set-орієнтованого підходу, що використовується в SQL-серверах баз даних. Крім BDE, Delphi дозволяє здійснювати доступ до баз даних, використовуючи технологію (і, відповідно, драйвери) Open DataBase Connectivity (ODBC) фірми Microsoft.

Всі інструментальні засоби баз даних Borland – Paradox, dBase, Database Desktop – використовують BDE. Всі особливості, що є в Paradox або dBase, "спадкуються" BDE, і тому цими ж особливостями володіє і Delphi.

Аліаси

Таблиці зберігаються в базі даних. Деякі СУБД зберігають базу даних в виді декількох окремих файлів, які являють собою таблиці (в основном, всі локальні СУБД), в той час як інші складаються з одного файла, який містить в собі всі таблиці і індекси (InterBase, Access). Наприклад, таблиці dBase і Paradox завжди зберігаються в окремих файлах на диску. Директорій, що містить dBase .DBF файли чи Paradox .DB файли, розглядаються як база даних. Іншими словами, довільний директорій, що містить файли в форматі Paradox чи dBase, розглядається Delphi як єдина база даних. Для переключення на іншу базу даних необхідно просто переключитися на інший директорій.

Для успішного доступу до даних програма і BDE повинні володіти інформацією про місцезнаходження файлів потрібної бази даних. Завдання маршруту входить до обов’язків розробника.

Самий простий спосіб полягає в явному завдання повного шляху до каталогу, в якому зберігаються файли БД. Але в випадку зміни шляху, що трапляється не так вже рідко (наприклад, при переносі готової програми на комп’ютер замовника), розробник повинен перекомпілювати проєкт з урахуванням майбутнього місцезнаходження БД або передбачити спеціальні елементи керування, в яких можна задати шлях до БД.

Для вирішення такого роду проблем розробник може використовувати псевдонім бази даних, який являє собою іменовану структуру, що містить шлях до файлів БД і деякі додаткові параметри. В першому наближенні можна сказати, що ви просто присвоюєте маршруту довільне ім’я, яке використовується в програмі. Тоді при переносі програми на комп’ютері замовника досить створити стандартними засобами BDE одноіменний псевдонім і настроїти його на потрібний каталог. При цьому сама програма не вимагає переробок, так як вона звертається до псевдоніму з одним іменем, а ось BDE вже "знає", куди направити запит програми, що використовує цей псевдоним.

Помимо маршруту до файлів бази даних, псевдонім BDE обов’язково містить інформацію про драйвер БД, який використовується для доступу до даних. Наявність інших параметрів залежить від типу драйвера, а значить від типу СУБД.

Для керування псевдонімами баз даних, настройки стандартних і додаткових драйверів в складі BDE є спеціальна утиліта – BDE Administrator (виконуваний файл BDEADMIN.EXE). Стандартна конфігурація BDE зберігається в файлі IDAP1.CFG.

Для реєстрації створеної групи таблиць як цілістної бази даних ми з вами будемо використовувати іншу утиліту BDE – SQL Explorer (Провідник SQL) яка запускається з середовища Delphi командою DataBase – Explore (Бази даних – Провідник). При цьому на екрані з’явиться діалогове вікно:

В лівій частині вікна приводиться список всіх зареєстрованих в системі BDE баз даних, а в правій – властивості поточної бази, що вибрана в списку. Вся інформація структурована в виді ієрархічного дерева. При виборі в лівій панелі утиліти будь-якого вузла, в правій частині на сторінці Definition відображується вся необхідна інформація для цього об’єкта.

Для чотирьох локальних драйверів список параметрів в правій части панелі утиліти на сторінці Definition обмежується параметрами стандартного драйвера (STANDARD).

Призначення параметрів локальних драйверів BDE (Paradox, dBASE, FoxPro, ASCII) подано в таблиці.



Поделиться:


Последнее изменение этой страницы: 2016-04-18; просмотров: 297; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.216.229 (0.198 с.)