Hi, Just a couple of immediately obvious problems: 1. The Accept call will block until someone (the server) calls back. So... you should either use a separate thread (as suggested) or don't call Accept until you've sent the command to the server. 2. I can't see that you're sending the server the port number you're listening on (unless you've done this in sendCommand(), of course). If you don't, how can it call back? This doesn't apply to passive FTP, of course, but in passive FTP you don't listen - you connect. In any case, unless you're just practicing on how to use sockets - if you really need an FTP client and don't want to do all the details yourself: look at System.Net.WebClient and System.Net.FtpWebRequest in the framework documentation. Either of them will probably do what you want - and a lot easier. Pick the one you like...
-- Peter