IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Erreur 530 ftp


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2016
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 135
    Par défaut Erreur 530 ftp
    Bonjour,

    Suite à mon précédent sujet, j'ai continué de potacher mon petit programme, il fonctionne à merveille SAUF le plus important...
    Quand le programme veut se connecter au FTP pour télécharger la version, ça me met "Le serveur distant a retourné une erreur : (530) Non connecté".

    Pourtant je renseigne les ID (ils sont corrects) et le port (21).
    Donc je ne sais pas où se situe le souci en faite :-/.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     Sub dl()
     
            Dim monUriFichier As New System.Uri(ftp)
            Dim monUriDestinationFichier As New System.Uri(lac)
     
            If Not (monUriFichier.Scheme = Uri.UriSchemeFtp) Then
                MessageBox.Show("L'Uri du fichier sur le serveur FTP n'est pas valide",
                                "Une erreur est survenue", MessageBoxButtons.OK, MessageBoxIcon.Warning)
     
                Exit Sub
            End If
     
            If Not (monUriDestinationFichier.Scheme = Uri.UriSchemeFile) Then
                MessageBox.Show("Le chemin de destination n'est pas valide !",
                                "Une erreur est survenue",
                                MessageBoxButtons.OK, MessageBoxIcon.Warning)
     
                Exit Sub
            End If
     
            Dim monResponseStream As Stream = Nothing
            Dim monFileStream As FileStream = Nothing
            Dim monReader As StreamReader = Nothing
            Try
     
                Dim downloadRequest As FtpWebRequest = CType(WebRequest.Create(monUriFichier), FtpWebRequest)
     
                If Not user.Length = 0 Then
                    Dim monCompteFtp As New NetworkCredential(user, pass, "21")
                    downloadRequest.Credentials = monCompteFtp
                End If
     
                Dim downloadResponse As FtpWebResponse = CType(downloadRequest.GetResponse(), FtpWebResponse)
                monResponseStream = downloadResponse.GetResponseStream()
     
                Dim nomFichier As String = monUriDestinationFichier.LocalPath.ToString
     
                monFileStream = File.Create(nomFichier)
     
                Dim monBuffer(1024) As Byte
                Dim octetsLus As Integer
     
                While True
     
                    octetsLus = monResponseStream.Read(monBuffer, 0, monBuffer.Length)
                    If octetsLus = 0 Then
                        Exit While
                    End If
     
                    monFileStream.Write(monBuffer, 0, octetsLus)
                End While
                MessageBox.Show("Téléchargement effectué.")
     
            Catch ex As UriFormatException
                MessageBox.Show(ex.Message)
            Catch ex As WebException
                MessageBox.Show(ex.Message)
            Catch ex As IOException
                MessageBox.Show(ex.Message)
            Finally
     
                If monReader IsNot Nothing Then
                    monReader.Close()
                ElseIf monResponseStream IsNot Nothing Then
                    monResponseStream.Close()
                End If
     
                If monFileStream IsNot Nothing Then
                    monFileStream.Close()
                End If
            End Try
        End Sub
    Le code n'est pas parfait je le sais :-/ j'accepte toutes les critiques afin de m'améliorer.
    Merci d'avance de votre aide.
    Cordialement

    Vazer7070

  2. #2
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    je sais pas d'où vient ton erreur mais le troisième paramètre du constructeur de NetworkCredential n'est pas le numéro de port (déjà ce serait un entier) mais le domaine (utile pour les connexions NTLM par exemple). Si tu veux préciser le port indique le directement dans ton URL server. Essaie déjà ça et vois ce que ça te dit.

    Test faisable : remplace toutes tes variables par des constantes, si ça fonctionne c'est que c'est les manip' que tu fais dessus en amont qui sont à incriminer.

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2016
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 135
    Par défaut
    Alors mettre le port dans l'url, ça me met erreur 550 accès impossible.

    Et pour ce qui est du remplacement des variables par des constantes, ça fait pareil

  4. #4
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Re,

    je suppose que si tu ne précises pas le port dans l'URL (mais que tu le supprimes bien de ton appel au constructeur de NetworkCredential) tu auras le même résultat.
    A quoi ressemble l'URI de ton fichier destination ? (remplace l'IP par des x.x.x.x)

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2016
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 135
    Par défaut
    C'est l'ip en faite, je mettais non pas elle mais "ftp://ftp.mondomaine.fr/" qui est juste en soi mais pas pour le code^^

    Néanmoins, j'ai un dernier souci, j'ai un background worker pour faire progresser ma progressbar, néanmoins au lieu de lancer l'application, le téléchargement se fait PUIS l'application s'ouvre (on ne voit pas la progressbar du coup).
    Une idée.? :-/

    La déclaration:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub dl()
            BackgroundWorker1.RunWorkerAsync()
            While Me.BackgroundWorker1.IsBusy
                Application.DoEvents()
            End While
        End Sub
    Le lancement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    Private Sub bw(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
            Dim monUriFichier As New System.Uri(ftp)
            Dim monUriDestinationFichier As New System.Uri(lac)
     
            If Not (monUriFichier.Scheme = Uri.UriSchemeFtp) Then
                MessageBox.Show("L'Uri du fichier sur le serveur FTP n'est pas valide",
                                "Une erreur est survenue", MessageBoxButtons.OK, MessageBoxIcon.Warning)
     
                Exit Sub
            End If
     
            If Not (monUriDestinationFichier.Scheme = Uri.UriSchemeFile) Then
                MessageBox.Show("Le chemin de destination n'est pas valide !",
                                "Une erreur est survenue",
                                MessageBoxButtons.OK, MessageBoxIcon.Warning)
     
                Exit Sub
            End If
     
            Dim monResponseStream As Stream = Nothing
            Dim monFileStream As FileStream = Nothing
            Dim monReader As StreamReader = Nothing
            Try
     
                Dim downloadRequest As FtpWebRequest = CType(WebRequest.Create(monUriFichier), FtpWebRequest)
     
                If Not user.Length = 0 Then
                    Dim monCompteFtp As New NetworkCredential(user, pass)
                    downloadRequest.Credentials = monCompteFtp
                End If
     
                Dim downloadResponse As FtpWebResponse = CType(downloadRequest.GetResponse(), FtpWebResponse)
                monResponseStream = downloadResponse.GetResponseStream()
     
                Dim nomFichier As String = monUriDestinationFichier.LocalPath.ToString
     
                monFileStream = File.Create(nomFichier)
     
                Dim monBuffer(1024) As Byte
                Dim octetsLus As Integer
     
                While True
     
                    octetsLus = monResponseStream.Read(monBuffer, 0, monBuffer.Length)
                    If octetsLus = 0 Then
                        Exit While
                    End If
     
                    monFileStream.Write(monBuffer, 0, octetsLus)
                End While
     
     
            Catch ex As UriFormatException
                MessageBox.Show(ex.Message)
            Catch ex As WebException
                MessageBox.Show(ex.Message)
            Catch ex As IOException
                MessageBox.Show(ex.Message)
            Finally
     
                If monReader IsNot Nothing Then
                    monReader.Close()
                ElseIf monResponseStream IsNot Nothing Then
                    monResponseStream.Close()
                End If
     
                If monFileStream IsNot Nothing Then
                    monFileStream.Close()
                End If
            End Try
        End Sub
    Pendant l'action:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Private Sub BackgroundWorker1_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
            EarnProgressBar1.Value = e.ProgressPercentage
            Label3.Text = e.ProgressPercentage & "%"
        End Sub
    Après:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
            MessageBox.Show("Téléchargement effectué.")
        End Sub
    End Class

  6. #6
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Ayé ! Je viens de trouver ton souci (enfin à voir chez toi ).
    Voilà un exemple de code qui fonctionne chez moi (et en VB.NET, j'espère que tu apprécieras l'effort) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Try
        '' la requête pour le download
        Dim dlReq As FtpWebRequest = CType(WebRequest.Create("ftp://x.x.x.x//folder/sub/distantFile.bin"), FtpWebRequest)
        dlReq.Credentials = New NetworkCredential("user", "pass")
     
        '' la response pour récupérer le flux du fichier
        Dim dlResp As FtpWebResponse = CType(dlReq.GetResponse(), FtpWebResponse)
        Dim dlFile As Stream = dlResp.GetResponseStream()
        '' le buffer de byte qui servira ... de tampon
        Dim buffer(512) As Byte
        '' le fichier local qui recevra les données du fichier distant
        Dim localFile As FileStream = New FileStream("C:\\tmp\\localFile.bin", FileMode.Create)
     
        '' tant qu'on arrive à lire quelque chose on l'écrit dans le fichier local
        Dim readLen As Integer = dlFile.Read(buffer, 0, 512)
        While readLen > 0
            localFile.Write(buffer, 0, readLen)
            readLen = dlFile.Read(buffer, 0, 512)
        End While
        '' on ferme le fichier et on averti l'utilisateur
        localFile.Close()
        MBX("done")
     
    Catch ex As Exception
        MBX(ex.Message)
    End Try
    Toute la différence est dans l'URI du fichier distant : après l'IP j'ai mis 2 slashes ('/').
    pour info : je n'indique pas de port car j'utilise le port par défaut ; mon serveur distant est un Linux.

    Je regarderai ton problème de thread plus tard

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur connexion FTP
    Par bruninho dans le forum Pentaho
    Réponses: 0
    Dernier message: 11/04/2011, 09h55
  2. erreur transfert FTP ( ascii au lieu de bin )
    Par lolo2mars dans le forum Réseau
    Réponses: 2
    Dernier message: 14/03/2008, 21h27
  3. Erreur 530 avec serveur ftp (pure-ftpd & proftpd)
    Par Arnard dans le forum Debian
    Réponses: 3
    Dernier message: 18/03/2007, 19h18
  4. Écrire le log des Erreurs via FTP sur UNIX
    Par Alnsam dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 07/03/2007, 17h10
  5. Erreur TextFromServeur FTP
    Par scott33 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 29/12/2006, 10h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo