Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Обработчик команд в TIdFTPServer


Автор: SerGreY 14.4.2006, 14:45
Пишу обработчик команды:

Код

procedure TfrmDial.IdFTPServer1TIdCommandHandler0Command(
  ASender: TIdCommand);
var S:TMemoryStream;
begin
  S:=TMemoryStream.Create;
  ASender.Thread.Connection.ReadStream(S);
  ...
end;


Как только идет любое обращение к объекту ASender.Thread.Connection, программа останавливается, на выполнении этой команды, т.е. не выдает ошибку, не вылетает, не зависает.
Также пробовал использовать ReadBuffer(Buffer, sizeof(Buffer)), эффект тот же.

Я передаю данные командой Put(Stream, StreamLength)
Обработчик пишу для команды "STOU".

Как можно прочитать передаваемый поток?

Автор: Snowy 14.4.2006, 15:03
Просто брось на форму антифриз.

Автор: SerGreY 14.4.2006, 15:10
Цитата(Snowy @ 14.4.2006, 15:03)
Просто брось на форму антифриз.

Он уже есть на форме и включен.

Дело явно не антифризе. Тут именно что-то ни так при чтении.

Мне нужен доступ к рабочему потоку сервера. В TIdCommand.Thread точно хранится то, что нужно?

Автор: Snowy 14.4.2006, 15:25
Цитата(SerGreY @ 14.4.2006, 14:45 Найти цитируемый пост)
procedure TfrmDial.IdFTPServer1TIdCommandHandler0Command(
  ASender: TIdCommand);
var S:TMemoryStream;
begin
  S:=TMemoryStream.Create;
  ASender.Thread.Connection.ReadStream(S);

Так ты что-то пытаешься читать из коннекшена. Причем неизвестной длины.
Вот и вешается.
А за тебя все уже давно прочитано и лежит тут: ASender.Params

Автор: SerGreY 14.4.2006, 16:24
Я пробовал читать и с определенной длиной.

var i:integer;
S:TMemoryStream;
ASender.Thread.Connection.ReadStream(S, sizeof(i), false);

Все то же.


Params содержит строки.
А что будет в Params, если я передам какую-то record, а не строку?
Добавлено @ 16:29
Проще говоря, как передать произвольный набор данных (какой-то объект) через TIdFTP - TIdFTPServer ?

Автор: Snowy 14.4.2006, 16:54
Тогда тебе нужен не обработчик комманд, а OnExecute.
Обработчик комманд только для текста.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)