2010-07-29 5 views
0

Je veux faire plusieurs Télécharger/Télécharger FTP en utilisant en parallèle C# sans utiliser FtpWebRequest. J'ai écrit mon code personnalisé et quand j'essaie de télécharger deux fichiers simultanément le premier obtient le téléchargement correctement tandis que le second montre la taille de 0 Ko (il télécharge également).multiples Télécharger/Upload FTP en utilisant en parallèle C#

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 

    } 
} 

Dans ma principale méthode que je fais comme ceci:

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

Tout extrait de code ....

Répondre

0

Comme Dave a dit, vous auriez besoin des instances distinctes de votre classe FtpCommand. Cherchez à utiliser BackgroundWorker pour exécuter les commandes en arrière-plan (de façon asynchrone).

+0

@ Patrick: Donc s'il y a 100 fichiers je dois créer 100 instaces? –

+0

Je doute que vous seriez en mesure de télécharger 100 fichiers simultanément - la plupart des serveurs FTP mis une limite au nombre de connexions une seule adresse IP peut faire (pour empêcher une seule personne de surcharger le serveur). Votre question initiale posée sur le téléchargement de deux fichiers simultanément. Avec deux instances différentes de votre classe ftpCommand et deux classes BackgroundWorker, c'est faisable. – PatrickSteele

+0

@Patrick: 2 instances? Pouvez-vous me dire où créer 2 instance dans mon code ci-dessus. Merci. –

0

Comment êtes-vous émettez vos demandes en même temps?

enfilés?

Si oui - vous pouvez vous assurer de créer des instances distinctes de votre classe « FTPCommande ».

Je pense que nous aurons besoin de plus d'informations pour être en mesure de vous aider :)

+0

Ya Comme je veux savoir comment je peux créer le thread à ce sujet par exemple requests.Sepearte simultanée je ne vous ai pas les moyens. J'utilise comme ceci ftpcommand.sendCommand ("RETR", "RMSViewer.xml"); // Téléchargement depuis le serveur ftpcommand.sendCommand ("RETR", "cms.xml"); // Téléchargement depuis le serveur –

Questions connexes