Könnte Ihr mal überprüfen ob die Methode InternalPut aus der idFTP.pas
mit diese mehr oder weniger übereinstimmt, diese ist von
Indy 9:
Vielleicht hilft es ja dem Fehler auf die Schliche zu kommen.
Delphi-Quellcode:
procedure TIdFTP.InternalPut(const ACommand: string; ASource: TStream; AFromBeginning: Boolean = true);
var
LIP: string;
LPort: Integer;
LResponse: Integer;
begin
DoStatus(ftpTransfer, [RSFTPStatusStartTransfer]); try
if FPassive then begin
SendPassive(LIP, LPort);
WriteLn(ACommand);
FDataChannel := TIdTCPClient.Create(nil);
with TIdTCPClient(FDataChannel) do try
if (Self.IOHandler is TIdIOHandlerSocket) then begin
if not assigned(IOHandler) then begin
IOHandler:=TIdIOHandlerSocket.create(nil);
end;
TIdIOHandlerSocket(IOHandler).SocksInfo.Assign(TIdIOHandlerSocket(Self.IOHandler).SocksInfo);
TIdIOHandlerSocket(IOHandler).SocksInfo.IOHandler:=IOHandler;
end;
InitDataChannel;
Host := LIP;
Port := LPort;
Connect;
try
Self.GetResponse([110, 125, 150]);
try
WriteStream(ASource, {false}AFromBeginning);
except
on E: EIdSocketError do begin
// If 10038 - abort was called. Server will return 225
if E.LastError <> 10038 then begin
raise;
end;
end;
end;
finally Disconnect; end;
finally FDataChannel.IOHandler.free; FDataChannel.IOHandler:=nil; FreeAndNil(FDataChannel); end;
end else begin
FDataChannel := TIdSimpleServer.Create(nil); try
with TIdSimpleServer(FDataChannel) do begin
InitDataChannel;
BoundIP := (Self.IOHandler as TIdIOHandlerSocket).Binding.IP;
BoundPort := Self.DataPort;
BoundPortMin := Self.DataPortMin;
BoundPortMax := Self.DataPortMax;
BeginListen;
SendPort(Binding);
Self.SendCmd(ACommand, [125, 150]);
Listen;
WriteStream(ASource, AFromBeginning);
end;
finally FreeAndNil(FDataChannel); end;
end;
finally
DoStatus(ftpReady, [RSFTPStatusDoneTransfer]);
end;
// 226 = download successful, 225 = Abort successful}
LResponse := GetResponse([225, 226, 250, 426, 450]);
if (LResponse = 426) or (LResponse = 450) then begin
// some servers respond with 226 on ABOR
GetResponse([226, 225]);
DoStatus(ftpAborted, [RSFTPStatusAbortTransfer]);
end;
end;
procedure TIdFTP.InitDataChannel;
begin
FDataChannel.SendBufferSize := SendBufferSize;
FDataChannel.RecvBufferSize := RecvBufferSize;
FDataChannel.OnWork := OnWork;
FDataChannel.OnWorkBegin := OnWorkBegin;
FDataChannel.OnWorkEnd := OnWorkEnd;
end;
Grüße
Klaus
[edit] habe gerade festgestellt, daß dies hier nicht die große Hilfe ist, da idFTP wohl sehr große
Veränderungen erfahren hat. [/edit]