Newsgroups : Borland : borland.public.delphi.internet.winsock : 2006 Mar : Re: FTP in Thread

www.cryer.info
Managed Newsgroup Archive

Re: FTP in Thread

Subject:Re: FTP in Thread
Posted by:"sham" (shamre..@inspirationmatters.com)
Date:Sat, 8 Apr 2006 14:33:18

Since I have not had any reply regarding the INDY problem I am having, are
there any other blocking FTP clients out there?

Sham.
"sham" <shamresh@inspirationmatters.com> wrote in message
news:443518fc$1@newsgroups.borland.com...
> Further to may last email:
>
> Client :
> procedure TForm1.Button1Click(Sender: TObject);
> var
>  FFTPClient: TIdFTP;
>  i : integer;
>  FileList : TStringList;
>  currentDirectory : String;
>  FileStream : TFileStream;
>  filename : string;
>  sizeOfFile : integer;
> begin
>  Button1.Enabled := False;
>
>  currentDirectory :=
> IncludeTrailingPathDelimiter(ExtractFileDir(Application.ExeName));
>  for i := 1 to 100 do
>    begin
>      FileList := TStringList.Create;
>      try
>        FileList.Add('TestDemo' + intToStr(i));
>        fileName := currentDirectory + 'TestDemo' + intToStr(i) + '.dat';
>        FileList.SaveToFile(fileName);
>      finally
>        FileList.Free;
>      end;
>    end;
>
>  FFTPClient:= TIdFTP.create(nil);
>  try
>    FFTPClient.Host := '127.0.0.1';
>    FFTPClient.Port := 21;
>    FFTPClient.Username := 'abc';
>    FFTPClient.Password := '';
>    FFTPClient.TransferType := ftBinary;
>    FFTPClient.ReadTimeout := 5000;
>
>    FFTPClient.Connect();
>    try
>       for i := 1 to 100 do
>         begin
>           fileName := 'TestDemo' + intToStr(i) + '.dat';
>           FileStream := TFileStream.Create(fileName, fmOpenRead);
>           try
>             sizeOfFile := FileStream.Size;
>
>             FFTPClient.Put(FileStream, fileName + '-FS=' +
> intToStr(sizeOfFile));
>           finally
>             FileStream.Free;
>           end;
>         end;
>
>   finally
>     FFTPClient.Disconnect;
>   end;
>  finally
>    FFTPClient.Free;
>  end;
>
>  Button1.Enabled := True;
> end;
>
> Server :
>
> procedure TForm1.IdFTPServer1StoreFile(ASender: TIdFTPServerThread;
>  const AFileName: String; AAppend: Boolean; var VStream: TStream);
> var
>  tempFileName : string;
> begin
>  tempFileName := StringReplace(AFileName, '/', '\', [rfReplaceAll]);
>  VStream := TFileStream.Create('D:\data' + tempFileName, fmCreate);
> end;
>
> procedure TForm1.IdFTPServer1UserLogin(ASender: TIdFTPServerThread;
>  const AUsername, APassword: String; var AAuthenticated: Boolean);
> begin
> AAuthenticated := True;
> end;
>
> That is pretty much it.
>
> I am using 9.0.18.
>
> There must be some sort of problem in my enviornment if I cannot get this
> working.
> As I mentioned before, when I use GuildFTP, all seems fine.
>
> Sham.
>
> "sham" <shamresh@inspirationmatters.com> wrote in message
> news:44350837@newsgroups.borland.com...
>> Hi,
>>
>> This is what I have done so far:
>>
>> Simple server application which has a TidFTPServer component and a
>
>> OnStoreEvent that does a VStream := TFileStream(filename, fmCreate);
>>
>> That is all.
>>
>> Client App demo has no threads (taken them out) and loops 100 times and
>> sends files. I still get a readTimeOut on the client:
>>
>> There are a number of threads running on the Server and two of them have
>> the stacks:
>> Thread 1 (on server)
>> TIdStackWindows.WSSelect(???,???,nil,???)
>> CheckIsReadable(4561208)
>> TIdSocketHandle.Readable(-2)
>> TIdIOHandlerSocket.Readable(???)
>> TIdTCPConnection.ReadFromStack(True,-2,True)
>> TIdTCPConnection.ReadLn(#$A,-1,16384)
>> TIdTCPServer.DoExecute($E24A38)
>> TIdPeerThread.Run
>> TIdThread.Execute
>>
>>
>> Thread 2 (on server)
>> TIdStackWindows.WSSelect(???,???,nil,???)
>> TIdSocketHandle.Select(???,4561208)
>> TIdServerIOHandlerSocket.Accept(1796,$E24718)
>> TIdListenerThread.Run
>> TIdThread.Execute
>>
>>
>> On the client the stack is:
>> (on client when time out occurs)
>> TIdTCPConnection.ReadFromStack(True,5000,True)
>> TIdTCPConnection.ReadLn(#$A,-1,16384)
>> TIdTCPConnection.ReadLnWait(2147483647)
>> TIdTCPConnection.GetInternalResponse
>> TIdTCPConnection.GetResponse((...))
>> TIdTCPConnection.SendCmd(???,???)
>> TIdFTP.SendPort($45A31C)
>> TIdFTP.InternalPut('STOR TestDemo5.dat-FS=11',$CF37D0,True)
>> TIdFTP.Put($CF37D0,'TestDemo5.dat-FS=11',False)
>> TForm1.Button1Click(???)
>> FTPSenderTest
>>
>> I have upgraded to 9.0.18 but cannot go to 10 since it breaks some other
>> components.
>>
>> We have got to the point where we are about to scrap indy.
>>
>> Any help would be appreciated.
>>
>> Sham.
>>
>> Ps. I replaced the server with GuildFTP and there is no problem. So
>> clearly the problem is with the ftp server code.
>>
>>
>>
>>
>>
>>
>>
>> "Martin James" <mjames_falcon@dial.pipex.com> wrote in message
>> news:4433fc08$1@newsgroups.borland.com...
>>>
>>> "sham" <shamresh@inspirationmatters.com> wrote in message
>>> news:4432690c$1@newsgroups.borland.com...
>>>> Yes, I am creating a thread and doing the put inside it.
>>>>
>>>> I have moved up the sleep to 50.
>>>>
>>>> I am not using the latest dev snapshot. I am using version 9.0.14.
>>>
>>> 9.0.14?
>>>
>>> I'm fairly sure that I've used this version before in threads without
>>> nay
>>> sleeps or other strangenesses.  It worked fine.  I'll try & make sure by
>>> looking through my old projects.
>>>
>>> Rgds,
>>> Martin

Replies:

In response to:

www.cryer.info
Managed Newsgroup Archive