Обмен информацией по TCP/IP-протоколу
© 2004
Рудюк С.А.
rudjuk.kiev.ua
Часто возникает необходимость обмениваться данными между программами на разных компьютерах. Например, это необходимо в чатах, или в программах, которые должны реагировать одновременно на одно и то же событие.
Обмен информации между компьютерами можно реализовать большим количеством способов. В данной статье я рассмотрю обмен данными по протоколу TCP/IP.
Компоненты для обмена данными по TCP/IP
Для обмена данными по протоколу TCP/IP будем использовать три Indy-компоненты:
| TIdTCPServer | |
| TIdTCPClient | |
| TIdThreadMgrDefault | ![]() |
Клиентская компонента предназначена для посылки и приёма сообщений, а серверная компонента - для приёма сообщения и рассылки клиентским компонентам.
Программная реализация
Программа состоит из двех частей: серверная, на которой стоит серверная компонента, можно на неё ещё поставить и клиентскую компоненту - для тестирования клиентской части и возможности генерации сообщений с серверной программы. На клиентской части - стоит только клиентская компонента. Эта часть предназначена только для посылки и приёма сообщений.
Серверная часть
Установим
на форму в программе серверной части компоненты TIdTCPServer
, TIdThreadMgrDefault
.
Свяжите свойство ThreadMgr компоненты TIdTCPServer с компонентой TIdThreadMgrDefault.
Для запуска сервера хватит установить свойство компоненты в True:
|
Server.Active := True; |
Для остановки сервера - в False:
|
Server.Active := False; |
Для регистрагистрации подключенного компьютера следует определить событие OnConnect в компоненте TIdTCPServer.
|
var begin NewClient.DNS
:= AThread.Connection.LocalName; AThread.Data:=TObject(NewClient); try Protocol.Lines.Add(TimeToStr(Time)+' Соединение компьютера: "'+NewClient.DNS+'"'); end; |
Для регистрации отключения клиента необходимо определить событие ServerDisconnect.
|
var |
Обработка команд (рассылка) на серверной части осуществляется с помощью события OnExecute.
|
var
//
Регистрация компьютера //
Удаление компьютера :=FindConnComp(RusUpperCase(CommBlock.ComputerName)); RefreshConnected; //
Регистрация ответов RefreshGolosProcess; //
Различные сообщения if
CommBlock.ReceiverName = '' then with
Clients.LockList do AThread.Connection.WriteBuffer
(NewCommBlock, SizeOf (NewCommBlock), true); // and
there it
goes... |
Здесь я реализовал дополнительную регистрацию компьютера с помощью команды cmRegisterComp='REGISTER', и дополнительно посылку сообщения, что компьютер отключился: cmUnRegisterComp='UNREGISTER'.
При передаче сообщения передаётся сообщения типа TCommBlock. Это тип данных мы можем изменять по необходимости. В данном блоке я объявил переменную для идентификации ComputerName компьютера.
|
TCommBlock
= record // the Communication Block used in both parts
(Server+Client) |
Поле Command - команда, котора
посылается с клиентского места.
MyUserName - имя
пользователя, который посылает сообщение.
Msg -
Текст сообщения.
ReceiverName - название
компьютера-получателя сообщения, если это поле будет пустым,
то сообщение будет отправляться всем компьютерам.
Клиентская часть
Через клиентскую компоненту мы можем отправлять сообщения, а так же получать сообщения от других сообщений.
Установим
на форму клиентского приложения компоненту TIdTCPClient
.
Установим на форму кнопки Подключиться и Отключиться.
Обработчик кнопки Подключиться:
|
IncomingMessages.Lines.Add('===Подключение
к
серверу==='); ClientHandleThread
:=
TClientHandleThread.Create(True); RegComp; except |
В кнопке Отключиться прописываем:
|
if
Client.Connected
then |
Тип TClientHandleThread предназначен для обработки команд с клиентской стороны.
|
TEvent_Mesto
= procedure(Sender: TObject) of object; TClientHandleThread
= class(TThread) var procedure
TClientHandleThread.Execute; procedure
TClientHandleThread.HandleInput; //
Обработка команд or
RusCompare(CB.Command, cmdRegComp) |
В процедуре HandleInput перхватываются сообщения. В событии EventMest мы можем определить процедуру, которая будет выполняться при получении сообщения.
Помещаем на форму кнопку Послать, поле ввода Сообщение, и список Команда, где будут перечислены все доступные команды.
В обработчике щелчка кнопки опишем команду посылки сообщения:
|
var
//
Команда, которую мы посылаем //
Названеи компьютера //
Текст сообщения //
Название компьютера, которому мы посылаем сообщение
//
Название компьютера, который посылает сообщение
|
Copyright© 2004 Рудюк С.А.
| 2011 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2010 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2009 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2008 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2007 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2006 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2005 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2004 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2003 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2002 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2001 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2000 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 1999 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
- Компания по разработке программного обеспечения
- Услуги аутсорсинга в области программирования
- Как продлить срок службы картриджей
- Мошенничество во Всемирной Паутине. Осторожно: фишинг!
- Web-студия
- Как легально поднять уровень индекса цитирования.
- Мы реально сможем помочь вам в управлении предприятием
- Создание сайтов – популяризация вашего замысла
- Свой сайт. Управление ресурсом
- Семантическое ядро сайта или правила подбора ключевых фраз
- Программирование в среде Delphi 8 for .NET
- Практикум по Delphi для решения прикладных задач
- Фундаментальные алгоритмы и структуры данных в Delphi
- Delphi 6. Программирование на Object Pascal
- Delphi и технология COM
- Delphi в шутку и всерьез: что умеют хакеры
- Программирование в Delphi глазами хакера
- Delphi 2005. Секреты программирования
- Искусство создания компонентов Delphi
- Приемы программирования в Delphi на основе VCL
- Программирование баз данных в Delphi 7
- Программирование баз данных в Delphi
- Программирование в среде Delphi
- Программирование в Delphi 7
- Язык SQL в Delphi 5