Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сокеты. Гарантированное соединение. структура кода

36K
18 июля 2011 года
Pcrepair
64 / / 16.01.2011
Добрый день! Продолжается разработка клиент-серверного приложения типа РАДМИН (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
в общем, нужна подсказка
14
18 июля 2011 года
Phodopus
3.3K / / 19.06.2008
надо обрабатывать событие disconnected. Оно то ли эксепшном кидается, то ли event-ом приходит - не припомню. Проверить легко
36K
20 июля 2011 года
Pcrepair
64 / / 16.01.2011
но сейчас речь не об этом
почемуто при использовании ИНДИ10 (сервер-клиент) при установлении соединения с сервером удается передать на сервер только одну команду, остальные команды из клиента не выполняются.
приходится разрывать соединение и по новой его устанавливать для передачи следующей команды в сервер
кто то может дать комментарий?
14
20 июля 2011 года
Phodopus
3.3K / / 19.06.2008
Из офигенного количества выданной информации могу только сказать что Indy10 работает. Дебажте.
ПыСы. Не вижу объявления переменной Stream в коде... А, вижу. С такими глобальными вы мноого еще ошибок наберете. Избавляйтесь.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог