Створення мережевих програм на базі сокетів

Створення багатокористувацьких додатків на базі сокетів.

Працюючи в мережі Internet. ми дуже часто зустрічаємося з різного роду розрахованими на багато користувачів програмами. Ними можуть бути поштові клієнти, чати, форуми, FTP клієнти і т.п. Всі ці програми використовують для своєї роботи різного роду протоколу: FTP, POP, SMTP, HTTP, і т.д. Але базовим для них є єдиний протокол - TCP / IP.

Типове ж додаток TCP / IP побудовано на клієнт-серверній архітектурі. Прикладом застосування побудованого на цій архітектурі, є чат реального часу. У цій статті ми спробуємо створити чат засобами Borland Delphi. Для цієї мети нам необхідні компоненти TClientSocketі TServerSocket (рис. 1). Обрані нами компоненти при роботі з протоколом TCP / IP використовують інтерфейс сокетів. Але перш ніж перейти до розробки чату, розберемо, що ж таке сокети.

(Рис. 1) Розташування компонентів TClienSocket і TServerSocket

Сокети - це інтерфейс прикладного програмування для мережевих додатків TCP / IP. Інтерфейс сокетів був створений у вісімдесятих роках для операційної системи UNIX. Пізніше інтерфейс сокетів був перенесений в Microsoft Windows. Сокети до сих пір використовуються в додатках для мереж TCP / IP. У перекладі з англійської "sockets" - гнізда, тобто мережеві додатки використовують сокети. як віртуальні роз'єми для обміну даними між собою. Сокети бувають трьох видів: клієнтські. слухають і серверні.

Клієнтські сокети встановлюють зв'язок з сервером і обмінюються з ним даними. Клієнтський сокет включений в компонент T C lientSocket. Хто слухає сокет приймає запит на з'єднання від клієнтського сокета. і з'єднує сервер з клієнтом. Хто слухає сокет міститься в компоненті TServerSocket. Серверний сокет обмінюється даними з клієнтом за допомогою вже встановленого (слухають сокетом) з'єднанню.

Перейдемо до прикладу. У нас буде два додатки: сервер і клієнт. Чат буде працювати за принципом - один сервер і безліч клієнтів. Клієнт буде посилати повідомлення на сервер, а сервер буде розсилати це повідомлення іншим клієнтам, тобто клієнти будуть обмінюватися сполучення між собою через сервер. Для написання чату, ми створимо два проекти: сервер і клієнт.

створення сервера

Створіть форму і додайте на неї компоненти, показання на рис.2.

Створення мережевих програм на базі сокетів

У процедурі FormCreate задається значення порту, через який відбуватиметься обмін даними. Потім TServerSocket починає свою роботу. У обробнику кнопки «Вихід» відбувається відключення сервера. При завершенні роботи програми, дуже важливо відключати TServerSocket і закривати з'єднання. Далі в обробнику події OnClienRead. компонента TServerSocket відбувається обробка даних отриманих від клієнта. Подія OnClienRead генерується при отриманні даних від клієнта. Це все, що потрібно враховувати при розробці клієнта. Відкомпілюйте створене нами програма.

procedure TForm1.ServerSocket1ClientRead (Sender: TObject;
Socket. TCustomWinSocket);
var
S: String;
I: Integer;
begin

S. = InTtoStr (Socket.SocketHandle) + '>' + Socket.ReceiveText;
ListBox1.Items.Add (S);

For i. = 0 to ServerSocket1.Socket.ActiveConnections - 1 do
з ідентифікатором сокета. надіслав повідомлення, то.>
if ServerSocket1.Socket.Connections [i]. SocketHandle <> Socket.SocketHandle then

ServerSocket1.Socket.Connections [i]. SendText (S);
end;

створення клієнта

Створіть форму і додайте на неї компоненти, показані на малюнку 3.

Створення мережевих програм на базі сокетів

ClientSocket1.Active. = True;
end;

procedure TForm1.ClientSocket1Read (Sender: TObject;
Socket. TCustomWinSocket);
Обробка даних від сервера
>
begin

Listbox1.Items.Add (Socket.ReceiveText);
end;