Лабораторная Socket
.docЛабораторная работа № 3
Сетевое программирование с использованием сокетов
Цель работы
Получить навыки создания сетевых приложений на основе технологии 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;
Скомпилируем программу и перейдем к разработке клиента.
Разработка клиента.
Поместим программу в папку Client
Создадим форму, приведенную на рисунке.
Для компонента ClientSocket укажем следующие свойства:
Port=1025 (любой свободный, обычно больше 1024, совпадает с указанным сервером)
Active=False.
Addres= 127.0.0.1 (в случае, если клиент устанавливается на том же компьютере, что и сервер. Если клиент устанавливается на другом компьютере необходимо указать IP адрес соответствующего компьютера.
Для события OnRead компонента ClientSocket пишем следующий код:
Var S:String;
begin
S:=Socket.ReceiveText;ListBox1.Items.Add(S);
{В случае если в зависимости от пришедшего сообщения необходимо выполнить
какие-либо действия}
If S='48 > Pricol' Then ShowMessage('Прикол');
end;
Для кнопки «Подключиться к серверу»
begin
If Not ClientSocket1.Active Then ClientSocket1.Active:=True;
end;
Для кнопки «Послать сообщение»
begin
ClientSocket1.Socket.SendText(Edit1.Text);
end;
Для кнопки «Выход»
begin
ClientSocket1.Active:=False;Close;
end;
Скомпилируем программу.
Задание к лабораторной работе
-
Ознакомиться с технологией сетевого взаимодействия приложений посредством технологии Socket. Изучить основные функции интерфейса сокетов.
-
Написать приложение, реализующее задание своего варианта.
-
Отладить написанное приложение на локальной машине и проверить его работоспособность в локальной сети
-
В отчете к лабораторной работе отразить ход выполнения работы, привести текст основных программных функций, ответить на контрольные вопросы.
Варианты заданий
-
Сетевая игра «камень, ножницы, бумага». Предусмотреть возможность ведения счета по результатам проведенных партий.
-
Игра в города. Осуществлять автоматическую проверку соответствия сообщений игроков правилам игры.
-
Статистическая обработка текста. Приложение-сервер подсчитывает частоту появления каждого символа в полученном тексте и посылает эту информацию клиенту.
Контрольные вопросы
-
Понятие технологии Windows Socket.
-
Основные этапы работы с сокетами.
-
Понятие технологии «клиент-сервер»
-
Блокирующие и неблокирующие сокеты.
-
Понятие IP-адреса.
-
Какой адрес используется в случае локального сервера?