Читаем Delphi. Трюки и эффекты полностью

Листинг 11.8.

Запрос и обработка данных, полученных с сервера

procedure TForm1.Timer1Timer(Sender: TObject);

var

stream: TMemoryStream;

begin

//Запрашиваем у сервера данные о наблюдаемом компьютере

with (IdTCPClient1) do

begin

//…разрешение

WriteLn(\'get_screen_width\');

WriteLn(\'get_screen_height\');

lblResolution.Caption := IntToStr(ReadInteger) + \'x\' +

IntToStr(ReadInteger);

//…глубина цвета

WriteLn(\'get_screen_colors\');

lblColors.Caption := IntToStr(ReadInteger);

//…копия экрана

//.....первый вариант – копирование экрана без сжатия

WriteLn(\'get_screen\');

//.....второй вариант – сжатие на стороне сервера

WriteLn(\'get_screen:\' + IntToStr(imgScreen.Width) + \',\' +

IntToStr(imgScreen.Height));

//....получаем данные

stream := TMemoryStream.Create;

ReadStream(stream);

stream.Position := 0;

//....формируем изображение

imgScreen.Picture.Bitmap.LoadFromStream(stream);

stream.Clear;

stream.Free;

end;

end;

В тексте листинга 11.8 создано большое количество комментариев, поэтому дополнительно пояснять его нет смысла. Остановимся лишь на том, зачем в процедуре TForml.TimerlTimer предусмотрено два варианта получения изображения с сервера.

Все дело в том, что сжатие (в нашем примере разрешение экрана наблюдаемого компьютера больше размера компонента imgScreen) на стороне сервера требует от компьютера, на котором запущено серверное приложение, большего процессорного времени на снятие копии экрана. Это снижает нагрузку на сеть при передаче изображения, а также экономит ресурсы компьютера-клиента. Но качество сжатого изображения в этом случае получается несколько хуже, чем когда мы предоставляем компоненту Image возможность масштабировать изображение самостоятельно.

Если же не использовать сжатие изображения на сервере, возрастает нагрузка на сеть при передаче полноразмерной копии экрана, а вся работа по сжатию изображения возлагается на компонент imgScreen (то есть дополнительно тратится процессорное время на компьютере клиента). При большом разрешении экрана наблюдаемого компьютера (или при наблюдении сразу за несколькими компьютерами) машина клиента, если она недостаточно мощная, может начать весьма ощутимо «тормозить». Качество сжатого изображения при этом получается более высоким.

В качестве более-менее эффективного решения можно предложить использовать большие промежутки времени между запросами данных с сервера слежения с масштабированием изображения на серверной стороне (если только машина сервера не является очень маломощной).

11.4. Многопользовательский разговорник

В завершение знакомства с компонентамиIdTCPCLient и IdTCPServer для организации сетевого взаимодействия рассмотрим создание полноценного клиент-серверного приложения – многопользовательского разговорника. Как можно догадаться из названия, это приложение будет позволять обмениваться сообщениями большому количеству пользователей (наподобие чата).

Поскольку этот пример будет несколько сложнее (в плане организации сетевого взаимодействия) предыдущих примеров главы, то рассмотрим подробно основные этапы его проектирования, разработки и реализации (начиная с требований и поведения клиента и сервера и заканчивая нюансами реализации приложений).

Требования к клиентскому и серверному приложениям

Пользователи при работе с клиентскими приложениями должны иметь следующие возможности:

• видеть полный текст разговора с момента их подключения к серверу;

• отсылать сообщения как всем, так и только определенным пользователям;

• видеть список пользователей, участвующих в разговоре (при этом список должен автоматически обновляться при отключении или присоединении новых пользователей);

• получать уведомления об отключении или присоединении новых пользователей (прямо в тексте разговора).

Серверное приложение, кроме управления подключением, отключением пользователей, а также доставки сообщений, должно обеспечивать протоколирование событий (подключение, отключение пользователей, от кого и кому послано то или иное сообщение).

Перейти на страницу:

Похожие книги

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ

Эта книга представляет собой перевод третьего издания американского бестселлера Effective C++ и является руководством по грамотному использованию языка C++. Она поможет сделать ваши программы более понятными, простыми в сопровождении и эффективными. Помимо материала, описывающего общую стратегию проектирования, книга включает в себя главы по программированию с применением шаблонов и по управлению ресурсами, а также множество советов, которые позволят усовершенствовать ваши программы и сделать работу более интересной и творческой. Книга также включает новый материал по принципам обработки исключений, паттернам проектирования и библиотечным средствам.Издание ориентировано на программистов, знакомых с основами C++ и имеющих навыки его практического применения.

Скотт Мейерс , Скотт Майерс

Программирование, программы, базы данных / Программирование / Книги по IT