I'm working with a setup involving many clients PCs and some server machines. I need to organize a reliable and fast method of file transfer between these PCs, that will be initiated by C# apps running on both. Any client may want to send/receive data from any server. The options are:

* FTP - Use [FtpWebRequest](http://msdn.microsoft.com/en-us/library/ms229715.aspx) or [SOSFTP](http://sourceforge.net/projects/sosftp/) to upload files onto an FTP server. The server checks for new files on its filesystem and does the required steps.
* SCP - Secure file transfer. Usage same as FTP but increased security between machines. Probably slower than FTP.
* DropBox / Box.Net - Use an online cloud storage solution with a library such as [SharpBox](http://sharpbox.codeplex.com/). May be free / paid. May be less secure considering the said party has your files.
* UDP - Use a library such as [EME](http://businessintegrationtechnology.com/CommunityEdition.html) or [GoAnywhere](http://www.goanywheremft.com/products) to transfer data from PC to PC directly via UDP. Probably faster but probably more unreliable since it uses custom technology.

What do you recommend?