Я использую Delphi 2010 и Indy 10, который поставляется с ним. MemStream является TMemoryStream и содержит файл, загруженный с веб-сайта.Как отправить TMemoryStream с помощью IdTrivialFTP Indy?
IdTrivialFTP1 := TIdTrivialFTP.Create(nil);
try
IdTrivialFtp1.Name := 'IdTrivialFTP1';
IdTrivialFTP1.Host := 'my-tftp-server-name.contoso.com';
IdTrivialFTP1.Port := 69;
IdTrivialFTP1.ReceiveTimeout := 4000;
MemStream.Position := 0;
IdTrivialFTP1.Put(MemStream, sFileName);
finally
FreeAndNil(IdTrivialFTP1);
end;
Всякий раз, когда я запускаю этот код, я получаю ошибку:
Project TestProject.exe raised exception class ERangeError with message 'Range check error'.
Я делал совсем немного Google-ков, чтобы понять эту ошибку, но я в настоящее время в убыток , Я также видел только 1 example of how to perform a TFTP PUT с использованием компонентов Indy.
Любые идеи?
UPDATE: Если трассировать в ошибку немного, я считаю, что ошибка быть выброшен из внутри «IdTrivialFTP.pas» в строке 272:
CurrentDataBlk := WordToStr(GStack.HostToNetwork(Word(TFTP_DATA)))
+ WordToStr(GStack.HostToNetwork(BlockCtr));
Для ясности, вот контекст этого кода:
if BlockCtr > PrevBlockCtr then
begin
DataLen := IndyMin(BufferSize - hdrsize, SourceStream.Size - SourceStream.Position);
SetLength(CurrentDataBlk, DataLen + hdrsize);
CurrentDataBlk := WordToStr(GStack.HostToNetwork(Word(TFTP_DATA))) + WordToStr(GStack.HostToNetwork(BlockCtr));
SetLength(CurrentDataBlk, DataLen + hdrsize);
//SourceStream.ReadBuffer(CurrentDataBlk[hdrsize+1], DataLen);
DoWork(wmWrite, DataLen);
TerminateTransfer := DataLen < BufferSize - hdrsize;
PrevBlockCtr := BlockCtr;
end;
Send(FPeerIP, FPeerPort, CurrentDataBlk);
until False; { repeat }
У меня есть IdTrivialFTP.pas в редакции 3979 от svn.atozed.com, а строка 'SourceStream.ReadBuffer' по-прежнему закомментирована. –
Проверьте IdTrivialFTP.pas, который находится в \ Indy10 \ branch \ Tiburon \ Lib \ Protocols. – Mick
Кроме того, я только что понял, что проверил ревизию 3980, так что это может быть причина, по которой вы ее не видели. – Mick