Descarga múltiple / carga paralela en FTP usando C #

Quiero hacer una descarga múltiple / carga paralela en FTP usando C # sin usar FTPWebRequest. He escrito mi código personalizado y, cuando bash descargar dos archivos simultáneamente, el primero se descarga correctamente y el segundo muestra el tamaño en 0 KB (también se descarga).

public void sendCommand(String command, params string[] strfilename) { if (command == "RETR ") //Downloading file from Server { FileStream output = null; if (!File.Exists(strfilename[0])) output = File.Create(strfilename[0]); else output = new FileStream(strfilename[0] , FileMode.Open); command = "RETR " + strfilename[0]; Byte[] cmdBytes = Encoding.ASCII.GetBytes((command + "\r\n").ToCharArray()); clientSocket.Send(cmdBytes, cmdBytes.Length, 0); Socket csocket = createDataSocket(); DateTime timeout = DateTime.Now.AddSeconds(this.timeoutSeconds); while (timeout > DateTime.Now) { this.bytes = csocket.Receive(buffer, buffer.Length, 0); output.Write(this.buffer, 0, this.bytes); if (this.bytes <= 0) { break; } } // this.BinaryMode = true; output.Close(); if (csocket.Connected) csocket.Close(); this.readResponse(); MessageBox.Show("File Downloaded successfully"); else if....so on } } 

En mi método principal me gusta esto:

 ftpcommand.sendCommand("RETR ","RMSViewer.xml"); //Downloading from Server ftpcommand.sendCommand("RETR ","cms.xml");//Downloading from Server 

Cualquier fragmento de código ….

Como dijo Dave, necesitarías instancias separadas de tu clase ftpCommand. Considere el uso de BackgroundWorker para ejecutar los comandos en segundo plano (de forma asíncrona).

¿Cómo estás emitiendo tus peticiones simultáneamente?

¿Roscado?

Si es así, es posible que desee asegurarse de que está creando instancias separadas de su clase “ftpcommand”.

Creo que necesitaremos más información para poder ayudarte 🙂