TClientSocket & TServerSocket h2>
Макагон Сергій p>
У C + + Builder 6 для передачі будь-якої інформації з
мережі зручніше за все використовувати компоненти закладку Internet: TClientSocket і
TServerSocket. p>
Щоб краще розібратися в роботі цих компонентів я
пропоную написати простенький мережевий чат, на прикладі якого можна буде
легко побачити компоненти в дії. p>
Для початку створимо новий
проект (File-> New-> Application), помістимо на форму компоненти: p>
TClientSocket і TServerSocket, щоб наша програма
могла бути і клієнтом і сервером (не одночасно звичайно;)). p>
Далі розмістимо компонент TMemo (закладка Standart) --
в нього як ви здогадалися буде відображатися текст чату. p>
Наступним на форму потрібно кинути компонент TEdit
(Standart) - у нього ми будемо писати текcт, який потрібно відправити співрозмовникові.
p>
Ну і звичайно важко обійтися без кнопки відправити --
кидаємо на форму TButton. Крім того що вже є на формі, нам ще знадобиться
три кнопки і два Едіта (TEdit) (їх призначення описується по ходу звернення до
ним). p>
Отже, на формі: p>
ClientSocket1 і ServerSocket1 p>
Memo1 p>
Edit1, Edit2, Edit3 p>
Button1, Button2, Button3, Button4 p>
Тепер змінюємо властивості: p>
Button1-> Caption на "Відправити" p>
Button2-> Caption на "Створити" p>
Button3-> Caption на "Помилка з'єднання" і p>
Button4-> Caption на "Вимкнути". p>
Прибираємо текст у всіх Едіт. Властивість
Memo1-> ReadOnly = true, p>
ClientSocket1-> Host - потрібно написати IP-адреса
сервера до якого ви будете Присоеденяюсь p>
(IP-адреса встановлюється в настройках з'єднання
Windows), якщо прописати 127.0.0.1, то ви будете конектитись до себе на
комп'ютер (так зручно робити, коли перевіряєш на працездатність свою
програму. Запустивши її двічі, один клієнт з 127.0.0.1, а інша сервер!)
якщо ж ви коннектітся до одного, то заздалегідь домовтеся якою буде
Ай-Пі-адреса (143.0.0.5 - наприклад). Але для того щоб Ай-Пі-адресу можна було
легко змінити, ми й поклали на форму один з Едіт, його текст при коннекте і
відповідатиме властивості ClientSocket1-> Host і ClientSocket1-> Address. p>
У властивості ClientSocket1-> Port і
ServertSocket1-> Port - повинні стояти однакові значення, щоб Сервер і
Клієнт прослуховували і працювали на один порт. Число можна вибрати будь-яке (1024
наприклад). p>
Кнопку "Від'єднатись" спочатку потрібно
зробити недоступною (Enabled = false) тому що спочатку отсоеденяться нам немає від
кого. p>
Далі опишемо обробники подій для кнопок
"Створити", "Помилка з'єднання", "Вимкнути". p>
Кнопка "Створити" - активізує сервер. Він
починає прослуховувати порт для підключення з боку клієнта. p>
void __fastcall
TForm1:: Button2Click (TObject * Sender) p>
( p>
ServerSocket1-> Active = true; p>
// Робимо недоступну "Помилка з'єднання" (так як
ми вже сервер) p>
Button3-> Enabled = false p>
// Робимо доступну "Від'єднатись" (зрозуміло
навіщо) p>
Button4-> Enabled
= True p>
Memo1-> Lines-> Add ( "Сервер створений"); p>
) p>
Так наша програма стала сервером! p>
Давайте опишемо клієнта! (Кнопка
"Помилка з'єднання") p>
У Edit3-> Text впишіть 127.0.0.1 - передбачається
що буде тестуватися на одному комп'ютері (що б інших не морочитися:) p>
void __fastcall
TForm1:: Button3Click (TObject * Sender) p>
( p>
Edit3-> Text =
ClientSocket1-> Host// Надаємо Клієнту Ай-Пі з Едіта p>
Edit3-> Text =
ClientSocket1-> Address p>
ServerSocket1-> Active
= True; p>
// Робимо недоступну "Створити" (так як ми
Коннект) p>
Button2-> Enabled = false p>
// Робимо доступну "Від'єднатись" (зрозуміло
навіщо) p>
Button4-> Enabled = true p>
) p>
От Ви і написали той мінімум який треба для
освоєння компонентів! p>
Але хто хоче зупинятися? А чат доробити!
Правильно пишемо далі: p>
Далі будемо описувати властивості компонентів Клієнта і
Сервера OnConnect (коли приєднався). p>
void __fastcall
TForm1:: ServerSocket1ClientConnect (TObject * Sender, p>
TCustomWinSocket
* Socket) p>
( p>
Memo1-> Lines-> Add ( "Клієнт приєднався "); p>
) p>
Це коли ви сервер і до Вас приєдналися, на Мемо
з'явиться напис! p>
Для клієнта майже так само: p>
void __fastcall
TForm1:: ClientSocket1Connect (TObject * Sender, p>
TCustomWinSocket
* Socket) p>
( p>
Memo1-> Lines-> Add ( "Ви приєднані "); p>
) p>
Зрозуміло, так? Дуже добре, далі залишається тільки
розповісти Вам навіщо Edit2 на формі і описати кнопку "Відправити". p>
Отже, Едіт2 нам потрібен для Вашого ника! Адже який чат
без ника! p>
Тепер найголовніше - опис кнопки "Відправити
: P>
if (Edit2-> Text
== "") P>
ShowMessage ( "Нік !"); p>
return; p>
) p>
if (Edit1-> Text == "") p>
( p>
ShowMessage ( "Введіть текст який треба
відправити "); p>
return; p>
) p>
// Це була обробка виняткових ситуацій, типу
порожніх строк введення; p>
Memo1-> Lines-> Add (Edit2-> Text + "::
"+ Edit1-> Text); p>
if
(ServerSocket1-> Active == true) ( p>
ServerSocket1-> Socket-> Connections [0 ]-> p>
SendText (Edit2-> Text +"::"+ Edit1-> Text);
) p>
else p>
(
ClientSocket1-> Socket-> SendText (Edit2-> Text +"::"+ Edit1-> Text );} p>
Edit1-> Text = ""; p>
) p>
Тепер розберемося з цією купою коду: p>
// додаємо своє повідомлення себе в Мемо p>
Memo1-> Lines-> Add (Edit2-> Text + "::
"+ Edit1-> Text); p>
if
(ServerSocket1-> Active == true) (ServerSocket1-> Socket-> p>
Connections [0] -> SendText (Edit2-> Text +"::"+ Edit1-> Text )}; p>
Якщо ми сервер, то посилаємо нашу рядок першого в
списку клієнтові (чат розщітан на двох), інакше: p>
else ( p>
ClientSocket1-> Socket-> SendText (Edit2-> Text +"::"+ Edit1-> Text); p>
) p>
Посилаємо рядок серверу! p>
Незалежно від того хто ми (клієнт-сервер) p>
Очищаємо Едіт1: p>
Edit1-> Text = ""; p>
Також треба описати прийом інформації та занесення її в
Мемо1. Робиться це обробником події OnRead у TClientSocket і TserverSocket
: P>
void __fastcall
TForm1:: ClientSocket1Read (TObject * Sender, p>
TCustomWinSocket
* Socket) p>
( p>
Memo1-> Lines-> Add (Socket-> ReceiveText ())
; p>
) p>
void __fastcall
TForm1:: ServerSocket1ClientRead (TObject * Sender, p>
TCustomWinSocket
* Socket) p>
( p>
Memo1-> Lines-> Add (Socket-> ReceiveText ())
; p>
) p>
Ось вроди б і все. З TClientSocket і TserverSocket
розібралися, а кого зацікавила тема чату, заходьте в розділ "Мої
програми "І качайте закінчаться мною, з великою кількістю налаштувань
програму разом з исходниками. p>
Список літератури h2>
Для підготовки даної роботи були використані
матеріали з сайту http://www.realcoding.net/
p>