Click here to Skip to main content
6,629,377 members and growing! (20,248 online)
Email Password   helpLost your password?
General Programming » Internet / Network » FTP     Intermediate License: The Code Project Open License (CPOL)

FTP Client and HttpFileDownloader Components (Controls)

By Alex_1

FTP client and HttpFileDownloader components (controls).
C# (C# 1.0, C# 2.0, C# 3.0), Windows, .NET (.NET 2.0, .NET 3.0), Dev
Posted:25 Jun 2008
Views:15,896
Bookmarked:75 times
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
12 votes for this article.
Popularity: 5.13 Rating: 4.75 out of 5

1

2

3
3 votes, 25.0%
4
9 votes, 75.0%
5

Introduction

Once I needed a simple, open source, and robust FTP client to include in my project. To my surprise, I was not able to find one in spite of many FTP clients that were published on various websites including CodeProject. The problem was the quality: the published projects were just demos. There were no quality FTP clients.

According to ratings, the most popular CodeProject FTP client is available here: An FTP client library for .NET 2.0. In spite of numerous fixes, the component did not work as I anticipated. And the major problem is not in the fixes (some of them were quite reasonable) - the problem is in the underlying FtpWebRequest component itself.

The component is designed to operate in stateless mode. One can only guess what the reasons were behind such a “wise” decision. FTP is a connection based protocol, and any attempt to fit a connection based protocol into a connectionless component apparently can not work well, by definition. First, what can we possibly benefit out of relinquishing the control over the connection status? The connection will not go away even if you hide it somewhere - it is the protocol's property, not the component’s. I can only think that the designers of this component intended to keep the component in line with HttpWebRequest. But, the difference is that the HTTP protocol is stateless by nature and FTP is not.

FtpWebRequest problems

So, what is wrong with FtpWebRequest? The main problem is the response time. The connection to the server of any FTP client took about 2.5 seconds. FtpWebRequest consistently showed 13.5 seconds (when connected to the same site). No customer would tolerate an extra 11 seconds delay without reason (440% increase). Apart from that, if you do not explicitly set KeepConnectionAlive to false, the system would not work properly. (It is supposed to be false, by default.)

The solution

Luckily, I found a good solution in the aforementioned article's comments. The solution is edtFTPnet. It is an open source library of the highest quality (believe it or not). The library is designed by Enterprise Distributed Technologies. They also have advanced versions of FTP components (with SSL and other features), but they are not free. The only problem with the open source one is that it lacks multithreading support. But that is not a real problem – a multithreading wrapper can be created for almost anything if you have experience. This component is a multithreading wrapper for edtFTPnet designed as a Windows Forms control, with some minor additions like status bar support and threads handling.

Core features

  • Runs in a separate thread.
  • Ability to cancel the transfer at any time.
  • Progress bar support.
  • Displays estimated time left.
  • Displays transfer speed.

How to use the controls

Copy the root directory (and subdirectories) to any location. Create a new tab in the Visual Studio Toolbox. Register the library with the Visual Studio Toolbox by browsing for FTPLib. You will be able to see the controls on the tab.

Drag the control to your form. Place the progress bar on the form. Select your FtpControl and select your status bar in the ProgrBar control’s properties.

Create a status event by selecting and double clicking StatusUpdateEvent.

The rest is quite clear from the samples.

HttpFileDownloader

The second component is a HttpFileDownloader component (control). Both components inherit from the BaseDownloader component.

New version

If a newer version is released, it will be available here.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Alex_1


Member

Occupation: Web Developer
Location: Australia Australia

Other popular Internet / Network articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 14 of 14 (Total in Forum: 14) (Refresh)FirstPrevNext
GeneralFtp root folder PinmemberSPdo20:59 29 Sep '09  
Generalregistering dll - adding to Toolbox Pinmembersanicovan8:02 25 May '09  
GeneralRe: registering dll - adding to Toolbox PinmemberAlex_10:01 26 May '09  
GeneralRe: registering dll - adding to Toolbox Pinmembersanicovan4:05 26 May '09  
GeneralResuming? PinmemberNiklas Henricson4:15 6 May '09  
GeneralDownload list of files? [modified] PinmemberAmirtich9:37 3 May '09  
GeneralTHREAD PROBLEM Pinmembermnek842:55 21 Apr '09  
GeneralSetLocalFolder not working... Pinmemberabakshi4:03 18 Dec '08  
Generalencoding? PinmemberParkInSung19:15 1 Dec '08  
GeneralProblem with edtFTPnet Pinmemberinfoss22:49 21 Aug '08  
GeneralGreat project Pinmemberhardsoft13:34 26 Jun '08  
GeneralRe: Great project PinmemberAlex_117:39 26 Jun '08  
GeneralGood job Pinmemberbilo8123:18 25 Jun '08  
GeneralRe: Good job PinmemberAlex_117:52 26 Jun '08  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 25 Jun 2008
Editor: Smitha Vijayan
Copyright 2008 by Alex_1
Everything else Copyright © CodeProject, 1999-2009
Web21 | Advertise on the Code Project