Board index » cppbuilder » SLOW ftp upload

SLOW ftp upload


2005-07-22 02:33:33 PM
cppbuilder56
I have been sitting here watching my upload progress and in the past 5
minutes only 15 KB of a certain file have been uploaded. The weird thing is
that sometimes the transfer is blazingly fast, and other times it goes at
literally about 2 or 3 KBs a second. I am uploading the files-in-question
to my Tripod account via my own mini-FTP program. FTPClient is a TIdFTP
component. Below is my code:
FTPClient->Host = "ftp.tripod.com";
FTPClient->Port = 21;
FTPClient->User = "winboxer";
FTPClient->Password = "CENSORED";
FTPClient->Connect();
Memo1->Lines->Add("Uploading version information...");
FTPClient->TransferType = ftASCII;
FTPClient->Put("version.txt", "version.txt", false);
Memo1->Lines->Add("Uploading WinBoxer program...");
FTPClient->TransferType = ftBinary;
FTPClient->Put("winboxer.zip", "winboxer.zip", false);
Memo1->Lines->Add("Uploading WinBoxer source code...");
FTPClient->Put("winboxer_source.zip", "winboxer_source.zip", false);
Memo1->Lines->Add("Publishing complete. Disconnecting...");
FTPClient->Disconnect();
Like I said before, sometimes the speed is very fast but most of the time it
goes at a snail's pace. One thing that I've noticed is that it does NOT
alternate between the two speeds: if it starts slow, it will remain slow the
whole time...if it starts fast, it will remain fast the whole time. I'm on
DSL, so I know it's not my connection speed. Also, I can log into my Tripod
account via FTP using Internet Explorer and upload files and they go
super-fast - even at the SAME time that they're uploading slow using my
program. Is there something about my code that may make it (on occasion)
procede very slowly?
 
 

Re:SLOW ftp upload

Well, I rewrote all my code using straight Win32 API functions
(InternetOpen, InternetConnect, and FtpPutFile) and it's still going slow.
Internet Explorer must use some other protocol to make it go so fast.
 

Re:SLOW ftp upload

"Blake Young" < XXXX@XXXXX.COM >wrote in message
Quote
Well, I rewrote all my code using straight Win32 API functions
(InternetOpen, InternetConnect, and FtpPutFile) and it's still
going slow. Internet Explorer must use some other protocol to
make it go so fast.
Without seeing your actual code, I would suspect that your own code is the
bottleneck, especially since you get the same slowness using two different
libraries. Or maybe your connection is just slow in general, or your
machine is busy doing other things at the time, etc.
Gambit
 

{smallsort}

Re:SLOW ftp upload

Here is a complete program example showing my problem. I've noticed that as
soon as the Put() command is executed, my program appears to stop
responding. In other words, I can't move the window around, the button on
the form disappears, and if I move another window over my program, my
program window will not be redrawn after the other window is moved out of
the way. In addition, the upload is again going at a nearly imperceptable
pace. I thought that moving the upload code to its own thread might help,
but it did not. I looked at the CPU usage and it remained at 0% for my
program, even though the CPU usage for ALL open programs was only at about
3% (i.e. my system isn't bogged). Furthermore, I can log into the FTP
account via Internet Explorer and upload files at a fast pace, so the
program appears to be somewhere inside my code. Again, this is MY ENTIRE
PROGRAM! This is not a snippet from a larger piece of code. It's seems
very small and trivial, so I don't know what in the world could be the
problem. Compiling it only involves adding a button, a memo, an open
dialog, and a TIdFTP component to a default New Application.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (!OpenDialog1->Execute())
return;
AnsiString LocalFileName = OpenDialog1->FileName;
AnsiString RemoteFileName = ExtractFileName(OpenDialog1->FileName);
Memo1->Lines->Add("Connecting to ftp.tripod.com...");
if (IdFTP1->Connected())
IdFTP1->Disconnect();
IdFTP1->Host = "ftp.tripod.com";
IdFTP1->Port = 21;
IdFTP1->User = "winboxer";
IdFTP1->Password = "CENSORED";
IdFTP1->Connect();
Memo1->Lines->Add("Uploading selected file...");
try
{
IdFTP1->Put(LocalFileName, RemoteFileName, false);
}
catch (Exception &e)
{
Application->ShowException(&e);
IdFTP1->Disconnect();
return;
}
Memo1->Lines->Add("File uploaded. Disconnecting...");
IdFTP1->Disconnect();
}
//---------------------------------------------------------------------------
Thanks
Blake
 

Re:SLOW ftp upload

"Blake Young" < XXXX@XXXXX.COM >wrote in message
Quote
Here is a complete program example showing my problem. I've
noticed that as soon as the Put() command is executed, my program
appears to stop responding.
Indy is a blocking library. Its operations do not return control to the
caller until the operations finish. You are calling Put() in the context of
the main VCL thread. That is why everything is frozen while Put() does its
work. You need to either place a TIdAntiFreeze on the form, or else move
the TIdFTP to its own worker thread.
Gambit