Сетевое программирование с использованием сокетов
Цель работы
Получить навыки создания сетевых приложений на основе технологии 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;
Скомпилируем программу и перейдем к разработке клиента.