Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2011, 15:39   #1
evgeny_sh
 
Регистрация: 03.01.2011
Сообщений: 3
Печаль Indy 9, не работает onWork

Доброго времени суток, уважаемые господа. Я к вам, и вот по какому вопросу:
Возникла у меня необходимость накатать для служебного пользования небольшую софтинку для передачи данных по сети. Использую Delphi7 и Indy9, компоненты IdTcpServer и IdTcpClient. Сервер включен, слушает порт, клиент по мере необходимости передает файлы. В процессе возникла небольшая сложность - не удается организовать индикацию процесса передачи файла, т.к. у клиента почему то не работает onWork, onWorkBegin, onWorkEnd. В случае передачи с сервера на клиент все замечательно, возвращается значение aWorkCount, его можно прикрутить к прогрессбару, а в моем случае - нифига IdAntiFreeze использую, толку никакого.
Кто подскажет, что я не так сделал и как с этим наваждением броться?
З.Ы. На Delpi 2007 с Indy 10 по определенным причинам переписать не могу
Код примерно следующий:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdTCPConnection, IdTCPClient, IdBaseComponent,
  IdComponent, IdTCPServer, IdAntiFreezeBase, IdAntiFreeze;

type
  TForm1 = class(TForm)
    Server: TIdTCPServer;
    Client: TIdTCPClient;
    Button1: TButton;
    IdAntiFreeze1: TIdAntiFreeze;
    procedure Button1Click(Sender: TObject);
    procedure ServerExecute(AThread: TIdPeerThread);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ClientWork(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Integer);
    procedure ClientWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCountMax: Integer);
    procedure ClientWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
var
  FileName : String;
  FileSize   : Cardinal;
  p          : Pointer;
begin
  Client.Connect();
  FileName := 'C:\1.ini';
  with TFileStream.Create(FileName, fmOpenRead) do
  try
    FileName := ExtractFileName(FileName) + #00;
    GetMem(p, 256);
    try
      CopyMemory(p, @FileName[1], Length(FileName));
      Client.Socket.Send(p^, 256);
    finally
      FreeMem(p);
    end;
    FileSize := Size;
    Client.Socket.Send(FileSize, SizeOf(FileSize));
    GetMem(p, Size);
    try
      ReadBuffer(p^, Size);
      Client.Socket.Send(p^, Size);
    finally
      FreeMem(p);
    end;
  finally
  Free;
  end;
  Client.Disconnect;
end;

procedure TForm1.ServerExecute(AThread: TIdPeerThread);
var
  FileName : PChar;
  FileSize : Cardinal;
  FS : TFileStream;
begin
  GetMem(FileName, 256);
  try
    Athread.Connection.ReadBuffer(FileName^, 256);
    Athread.Connection.ReadBuffer(FileSize, SizeOf(FileSize));
    FS := TFileStream.Create(FileName, fmCreate);
    try
      aThread.Connection.ReadStream(FS, FileSize);
    finally
      FS.Free;
    end;
  finally
    FreeMem(FileName);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Server.Active := true;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Server.Active := false;
end;

procedure TForm1.ClientWork(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  ShowMessage('йа работаю');//Здесь и далее по неизвестным мне причинам ничего не происходит :(
end;

procedure TForm1.ClientWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
  ShowMessage('йа начал работать');
end;

procedure TForm1.ClientWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
  ShowMessage('йа закончил работать');
end;

end.
evgeny_sh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как обновить indy 9 на indy 10 Пилигрим Компоненты Delphi 16 30.04.2010 10:11
idHTTP. Cобытие onWork. Там есть значение WorkCount. Можно ли увидеть сколько уже скачалось текстом и... TwiX Работа с сетью в Delphi 0 13.03.2010 22:48
Библиотека НЕ работает с 2008, но работает с 2000 SQL namenike Общие вопросы C/C++ 0 26.05.2009 11:04
Почему после передачи tStream методами Indy не работает tBitmap.loadFromStream ? Altera Работа с сетью в Delphi 2 21.03.2009 15:35
Indy 9 против Indy 10 OrdJONY Свободное общение 2 08.11.2008 20:28