![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый день! Продолжается разработка клиент-серверного приложения типа РАДМИН (D2010 + INDY10)
Предыдущая версия работает, но работает не по правилам - постоянно идет коннект-дисконект с сервером при передаче скрина экрана сервера и передаче данных мыши с клиента на сервер. Из-за этого идет торможение, дерганье экрана. Надо это исправить Клиент должен работать следующим образом: - при нажатии на кнопку CONNECT клиент подключается к серверу - таймер (а может можно как то синхронизировать с дисплеем, чтоб изображение не дергалось?) отправляет на сервер координаты курсора мыши и информацию о нажатии кнопок мыши клиента, далее отправляет запросы на сервер о пересылке файла со скрином экрана сервера каждые 20 мС (или с частотой обновления экрана?) и отображает на TImage полученный файл - это должно продолжаться пока не пойдет команда на отключение клиента от сервера оператором. вопрос - правильно ли это? постоянное подключение к серверу? MSRDP Client именно так ведь и работает - при повторном нажатии на кнопку CONNECT, клиент отключается от сервера Подскажите структуру кода клиента, обеспечивающую: - гарантированное соединение клиента с сервером, при разрыве автоматически восстанавливающее соединение - вывод сообщения, наверно на компонент LABEL? о разрыве соединения. или в отдельное модальное окно? как правильно? пока есть вот такой код Код:
unit main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, Zlib; type TForm1 = class(TForm) PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; TabSheet3: TTabSheet; TabSheet4: TTabSheet; TabSheet5: TTabSheet; TabSheet6: TTabSheet; TabSheet7: TTabSheet; TabSheet8: TTabSheet; TabSheet9: TTabSheet; TabSheet10: TTabSheet; HOST: TEdit; PortNumber: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Button1: TButton; Image1: TImage; IdTCPClient1: TIdTCPClient; Timer1: TTimer; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure connect_to_server; procedure DecompressStream; //декомпрессия сжатого на стороне сервера файл.бмп end; var Form1: TForm1; Stream: TMemoryStream; implementation {$R *.dfm} procedure TForm1.DecompressStream; var pOut: Pointer; outSize: Integer; begin ZDecompress(Stream.Memory, Stream.Size, pOut, outSize); try Stream.Clear; Stream.WriteBuffer(pOut^, outSize); finally FreeMem(pOut); end; end; procedure TForm1.connect_to_server; begin IdTCPClient1.Host:=HOST.Text; IdTCPClient1.Port:=StrToInt(PortNumber.Text); IdTCPClient1.Connect; end; procedure TForm1.Button1Click(Sender: TObject); begin connect_to_server; end; end. with IdTCPClient1 do или while connected do в общем, нужна подсказка |