SmartFTP does what it needs to do. If not, use WS_FTP like Hazar says, though its interface is a bit complex at first, and it isnt easy to connect to ftp servers.
For client I use FlashFXP, for server either Serv-U or Bulletproof. I've just tried using fireFTP but I'm not happy with it. There doesn't seem to be a way of defining "sites" like in FlashFXP. At work I use 1 FTP server with 2 different logins (i.e. ftp.ftp.com with the username "images" and a password for getting to the image server, and the username "movies" for the movie server) and I just can't do this in fireFTP. Shame really, it looks like a really handy extension.