In the .Net Framework, there are quite a few. But my personal favorite is System.Net.FtpWebRequest. FTP is an entirely different animal than HTTP, but Microsoft saw fit to create the FtpWebRequest to use a programming interface that mimics the HTTP Session-less Request/Response model, and makes it extremely difficult to find out what the actual transmission messages are. In fact, FTP is "File Transfer Protocol," which means that its chief purpose is to serve as an intermediary for remote file system operations, such as uploading and downloading of files, browsing the virtual file system, etc. It is also a connected protocol, which retains a connection to the server until the session is over. But the FtpWebRequest class behaves as if each Request/Response is occurring completely separately from the next.
This class is also designed to behave best with Microsoft FTP servers, although most FTP sessions tend to occur with non-Microsoft FTP servers, as FTP is less in-use these days. I found it so opaque that I wrote my own FTP client classes which are modelled to behave like a real FTP session, and can interact well with any remote FTP server.