A simple FTP client class | CodeGuru

A simple FTP client class

Environment: VC5 Anyone who has used the WinInet FTP functions has probably noticed that there are a few handy features that are lacking. In particular, I wanted some code that would: Support the same firewalls as WS-FTP Allow me to execute arbitrary commands on the FTP server Add around 10K to my app install rather […]

Written By
CodeGuru Staff
CodeGuru Staff
Apr 26, 1999
2 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Environment: VC5

Anyone who has used the WinInet FTP functions has probably noticed that there are
a few handy features that are lacking. In particular, I wanted some code that would:


  • Support the same firewalls as WS-FTP
  • Allow me to execute arbitrary commands on the FTP server
  • Add around 10K to my app install rather than WinInet’s 1Mb #-)

The whole thing is implemented as a single class and there is nothing clever
about it at all, eg all socket connections are in synchronous mode. This does mean that
if you want to go off and do other things whilst the file transfer is in progress you’ll have to
run it in it’s own thread.

To use:

If you created your app without checking the “Use Windows Sockets”
checkbox in AppWizard, you’ll need to add the following bit of code
to you app’s InitInstance()

if(!AfxSocketInit())
{
	AfxMessageBox(“Could not initialize Windows Sockets!”);
	return FALSE;
}

You’ll also need to insert the files CFTPclient.cpp and CFTPclient.h
into your project. There are a few error messages in the demo project’s string
table that you’ll need to copy across also.

That done:


  1. Create an object of CFTPclient.

  2. Use LogOnToServer() to connect to the server. Any arguments
    not used (e.g. if you’re not using a firewall), pass an empty
    string or zero for numeric args. You must pass a server port
    number, use the FTP default of 21 if you don’t know what it is.
  3. Use MoveFile() to upload/download a file, 1st arg is local file
    path, 2nd arg is remote file path, 3rd arg is TRUE for a PASV
    connection (required by some firewalls), FALSE otherwise, 4th arg
    is TRUE to upload, FALSE to download file. MoveFile only works in
    synchronous mode (ie the function will not return ’till the transfer
    is finished). File transfers are always of type BINARY.
  4. You can use FTPcommand() to execute FTP commands.
    Note that this function will return FALSE unless the server response
    is a 200 series code. This should work fine for most commands,
    otherwise you can use WriteStr() and ReadStr() to send commands
    & interpret the response yourself. Use LogOffServer() to disconnect
    when done. Note: The required FTP server commands may have different syntax to a
    command line FTP client you may be used to. Check out RFC 959 for
    more nfo on what the available commands are.

Unfortunately I don

t have access to all the different types of firewalls


supported. So far I

ve only tested it using no firewall and a

USER with no logon


type firewall (which worked OK first time so I guess some of the others might


work too). #;-)

Useage example:

CFTPclient ftp;
// connect to FTP server
if(!ftp.LogOnToServer(“ftp.server.com”,21,”mylogon”,”mypass”,””,””,””,””,0,0))
{
	MessageBox(ftp.m_retmsg);
	return;
}
// change directory on FTP server
if(!ftp.FTPcommand(“CWD /home/images”))
{
	MessageBox(ftp.m_retmsg);
	ftp.LogOffServer();
	return;
}
// upload a file
ftp.MoveFile(“myfile.gif”,”myfile.gif”,FALSE,TRUE);
// show the result of the operation
MessageBox(ftp.m_retmsg);
// disconnect from server
ftp.LogOffServer();

Download demo project – [38KB]

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.