Глава 11 Сетевое взаимодействие
• Краткое описание сетевых компонентов
• Простой обмен данными
• Слежение за компьютером по сети
• Многопользовательский разговорник
Организация надежного сетевого взаимодействия между приложениями или компонентами одного приложения зачастую является задачей довольно сложной даже для программиста со значительным опытом работы. Это правда, если пытаться самостоятельно использовать API сетевого взаимодействия, предоставляемый операционной системой (в нашем случае – Windows). Однако с использованием компонентов Delphi, в которых уже реализованы рутинные операции по созданию соединений, пересылке данных, контролю ошибок и т. д., программирование сетевых приложений становится не только простым, но и увлекательным занятием. В данной главе мы рассмотрим несколько примеров создания несложных сетевых приложений, построенных с использованием архитектуры «клиент – сервер».
11.1. Краткое описание сетевых компонентов
В Delphi 7 количество компонентов для программирования самых различных сетевых приложений просто радует глаз (см. вкладки IndyQients и IndyServers). Мы рассмотрим построение приложения на базе только IdTCPServer и IdTCPCLient (написание клиент-серверных приложений с использованием всех сетевых компонентов могло бы занять всю книгу).
Итак, сначала о компоненте сервера IdTCPServer. Для использования возможностей сервера этот компонент нужно поместить на форму (компонент неотображаемый). При настройке компонента полезными являются следующие его свойства:
• Active – активизирует или деактивизирует сервер (по умолчанию False);
• Bindings – настраивает серверные сокеты (присоединяет их к определенному порту компьютера, позволяет задавать диапазон IP-адресов и портов клиентов) при помощи диалогового окна Binding Editor;
• ListenQueue – численное значение, ограничивающее максимальное количество запросов на установление соединения от клиентов в очереди;
• MaxConnections – позволяет ограничить максимальное количество клиентов, присоединенных к серверу;
• MaxConnectionReply – позволяет настроить сообщение, посылаемое сервером новым клиентам, когда их количество достигает MaxConnections.
Рассмотрим несколько подробнее настройку серверных гнезд с использованием свойства Bindings. Так, на рис. 11.1 показано, как при помощи диалогового окна Binding Editor настроить сервер на обслуживание клиентов с любыми IP-адресами, при этом серверный сокет присоединяется к порту 12340.
Рис. 11.1. Использование окна Binding Editor
Для более детальной настройки каждого серверного сокета можно использовать окна Object TreeView и Object Inspector так, как показано на рис. 11.2.
Рис. 11.2. Настройка серверного гнезда
На этом настройку сервера можно и завершить (хотя здесь используются далеко не все возможности компонента IdTCPServer). Основная же работа сервера при обработке запросов клиентов может реализоваться в обработчике события OnExecute. В этот обработчик передается ссылка на o6beKTTIdPeerThread – поток, ассоциированный с клиентом, присоединенным к серверу. Посредством этого объекта (а точнее, его свойства Connection) можно получать и отправлять данные, а также получать и устанавливать множество полезных параметров соединения. Первый пример использования объекта TIdPeerThread при обработке запроса клиента приведен в листинге 11.1.
Теперь рассмотрим, как сконфигурировать клиент (IdTCPQient), чтобы он был способен взаимодействовать с нашим сервером. Чтобы использовать компонент ТСР-клиента, достаточно поместить его на форму (компонент также неотображаемый).
После этого как минимум нужно настроить следующие его свойства (остальные упоминаются по мере необходимости в приведенных далее примерах):
• Host – имя или IP-адрес компьютера, на котором запущен сервер;
• Port – номер порта, к которому присоединен серверный сокет.
Вообще, даже эти свойства на этапе разработки формы настраивать не обязательно. Приложение получается гораздо более гибким, если давать, например, пользователю возможность выбрать (или ввести) имя или адрес сервера.
11.2. Простой обмен данными
В начале работы с описанными в предыдущем разделе компонентами IdTCPServer и IdTCPChent рассмотрим создание несложного клиент-серверного приложения, клиентская и серверная части которого выполняют следующие функции.
• Клиентское приложение соединяется с сервером и отправляет ему введенную пользователем строку, ждет ответа, выводит полученный от сервера текст, отсоединяется от сервера.
Читать дальше
Конец ознакомительного отрывка
Купить книгу