Разработка сервера

Сетевое программирование с использованием сокетов

Цель работы

Получить навыки создания сетевых приложений на основе технологии Socket

Краткие теоретические сведения

Сокетом (от англ. Socket – гнездо, розетка) называется специальный объект, создаваемый для отправки и получения данных через сеть. Чтобы 2 программы могли общаться друг с другом через сеть, каждая из них должна создать сокет. Каждый сокет обладает двумя основными характеристиками: протоколом и адресом, к которым он привязан. Протокол задается при создании сокета и не может быть изменен впоследствии. Адрес сокета задается позже, но обязательно до того, как через сокет пойдут данные.

В среде Delphi функции механизма обмена данными на основе сокетов воплощены в невизуальных компонентах TclientSocket и TserverSocket, расположенных на панели Internet. Начиная с версии Delphi7 и выше, компоненты TClientSocket и TServerSocket изначально отсутствуют на вкладке Internet, подключить библиотеку сокетов можно следующим образом:

Component -> Install Packages -> Add и выбираем файл dclsockets70.bpl

 

Пример

На основании компонентов TclientSocket и TserverSocket создадим многопользовательское приложение для обмена сообщениями, состоящее из программы сервера и программы клиента. Клиентские программы могут быть запущены на любом компьютере, в том числе и на самом сервере. Для компьютера, играющего роль сервера должен быть известен IP адрес.

Разработка сервера

Поместим программу в папку Server.

Создадим форму, приведенную на рисунке.

Для компонента ServerSocket укажем следующие свойства:

Port=1025 (любой свободный, обычно больше 1024)

Active=False.

Для события OnClientRead напишем следующий код:

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 Begin

If ServerSocket1.Socket.Connections[i].SocketHandle<> Socket.SocketHandle Then

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

End;

End;

Для процедуры создания формы:

Begin

ServerSocket1.Active:=True;

end;

Для кнопки «Выход»

Begin

ServerSocket1.Active:=False;Close;

end;

Для кнопки «Очистить»

Begin

ListBox1.Clear;

end;

Скомпилируем программу и перейдем к разработке клиента.