2010-11-03 7 views
3

Je souhaite tester une adresse IP donnée et des informations de connexion pour voir si le serveur FTP est actif/si les détails sont corrects. Rien de plus.C# - Serveur de vérification/test FTP

J'ai cherché sur le web une solution mais aucune ne semble simple/éloquente comme, par exemple, en utilisant la classe Ping pour faire un ping et vérifier un serveur. J'ai ce qui suit, qui ne fonctionne pas:

static private void testConntecion() 
    { 
     FtpWebRequest requestDir = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://172.29.200.158/")); 
     requestDir.Credentials = new NetworkCredential("dvm_user", "dvm"); 

     try 
     { 
      FtpWebResponse response = (FtpWebResponse)requestDir.GetResponse(); 
      Console.WriteLine("Cool Beans"); 
     } 

     catch(Exception ex) 
     { 
      Console.WriteLine(ex); 
     } 
    } 

J'ai aussi essayé:

FtpWebRequest requestDir = (FtpWebRequest)FtpWebRequest.Create("ftp://172.29.200.158/"); 

Message d'erreur: System.Net.WebException: L'URI est non valide pour cette commande FTP. at System.Net.FtpWebRequest.GetResponse()

Merci d'avance.

+0

Qu'advient-il si vous ne spécifiez pas 'ftp: //'? – Skurmedel

Répondre

4

Vous devez définir la méthode à la demande ftp:

requestDir.Method = WebRequestMethods.Ftp.ListDirectory; 
+0

Salut, cette méthode est fonctionnelle mais elle est très lente. Si les informations d'identification sont erronées, je dois attendre l'exception Timeout. Y a-t-il un moyen d'aller plus vite un peu comme fonctionne Fillezilla? –

+1

Cela peut être entièrement dépendant du serveur, si le serveur choisit simplement d'abandonner toutes les demandes non-correctes au lieu de donner une réponse négative, vous devez attendre. Bien que si le serveur vous donne réellement une réponse négative, il y aura une exception (ou peut-être un résultat nul selon l'opération). – flindeberg

2

Vous devez spécifier la méthode que vous utilisez pour la connexion. Vous pouvez les trouver dans l'espace de noms WebRequestMethods.Ftp. Par défaut, je crois que vous allez essayer de télécharger un fichier et votre URI ne spécifie pas de fichier à télécharger, d'où l'erreur URI invalide. Essayez de mettre un fichier de test à la racine de votre site FTP, peut-être appelé test.txt puis en modifiant votre URI pour qu'il soit ftp://172.29.200.158/test.txt, qui devrait ensuite essayer de télécharger le fichier.

Il est important de garder à l'esprit que c'est une classe de demande FTP et non un client FTP, par exemple, il effectue des actions spécifiques plutôt que d'ouvrir un canal pour vous permettre de parcourir, télécharger, etc.

+0

viens de me battre –

+0

@David Kemp: Avec la spécificité de votre réponse je pense que vous fermez les trous dans le mien ... +1;) – Lazarus

1

Pourquoi Ne traitez-vous pas simplement l'Exception dans un bloc ? :: -). Le code ci-dessous déterminerait correctement si un FTP fonctionne ou pas. Il repose sur la méthode de demande Web "ListDirectoryDetails", qui devrait être rapide et ne nécessite pas beaucoup de bande passante (normalement :: - D, c'est-à-dire, sauf si vous interrogez un fichier FTP de 15k).

Variables: _URL, _User, _Pass, _PassiveMode (vous pouvez essayer de vérifier les deux modes).

FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(_URL); 
    FtpWebResponse res; 
    StreamReader reader; 

    ftp.Credentials = new NetworkCredential(_User, _Pass); 
    ftp.KeepAlive = false; 
    ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails; 
    ftp.UsePassive = _PassiveMode; 

    try 
    { 
    using (res = (FtpWebResponse)ftp.GetResponse()) 
    { 
     reader = new StreamReader(res.GetResponseStream()); 
    } 
    } 
    catch 
    { 
    //Handling code here. 
    } 

J'oublie ce qui est l'erreur exacte d'un « mort » FTP, mais il est difficile de ne pas mettre un peu dans ce point d'arrêt prises, voir ce que l'exception est et manipuler :: -).

Il suffit de lancer tout cela dans une fonction avec 4 paramètres, ou peut-être 3 et vous essayez les deux Passive & Active en interne. La fonction renvoie un booléen, que le FTP fonctionne ou non. Il y a un peu de gaspillage lorsque vous demandez une liste de fichiers, mais c'est seulement nécessaire si vous êtes trop minutieux. Vous pouvez supprimer le "lecteur" ainsi que le flux de réponse je pense :: -).

Espérons que cela aide :: -).

0

Je pense que vous devez d'abord configurer requestDir.Method à une commande ftp avant de faire GetResponse(). Voir WebRequestMethods.Ftp pour les commandes possibles.