Problème transfert FTP via Winsock

Akita95 Messages postés 23 Date d'inscription dimanche 13 mars 2005 Statut Membre Dernière intervention 30 juillet 2007 - 6 oct. 2006 à 17:07
Akita95 Messages postés 23 Date d'inscription dimanche 13 mars 2005 Statut Membre Dernière intervention 30 juillet 2007 - 10 oct. 2006 à 13:16
Bonjour à tous et à toutes,

Je me permets de vous écrire car je rencontre un problème suite à l'utilisation de Winsock et je suis compplétement bloqué après avoir passé la journée à travailler dessus.
Je souhaite transferer un fichier vers mon serveur FTP local (IIS). Pour cela j'utilise 3 controle winsock comme j'ai pu le voir dans divers tutos et sources de vbfrance.
La connexion au serveur FTP et OK mais je n'arrive pas à effectuer le transfert.

Voila mon code complet

<---- Début du code ---->

Dim Port As Long 'Stocke le port renvoyé par le mode passif
Dim StrBuffer As Variant 'reception du fichier telecharger
Dim Tabstr() As String 'Stocke la reponse de la commande LIST
Dim coderecu As String

Private Sub Form_Load()

'On se connecte au serveur FTP local
SckFtp.Connect "localhost", "21"

End Sub

Private Sub SckFtp_Connect()
    ' On précise les identifiants de connexion
    MsgBox "Envoi du user"
    SckFtp.SendData "USER " & "usr_ftp" & vbCrLf
End Sub

Public Sub SckFtp_DataArrival(ByVal bytesTotal As Long)
    'Reception des codes (Msg) renvoyé par le serveur
    txtrecu = vbNullString
    SckFtp.GetData txtrecu, vbString

    'Decoupage du txt recu par ligne dans le tableau temp
    Dim Temp() As String
    Temp = Split(txtrecu, Chr(10))
    txtrecu = Temp(UBound(Temp) - 1)

    'Affichage des msg serveurs
    For i = 0 To UBound(Temp) - 1
   
            ' Si le 4éme caractére n'est pas - alors c un code
            If Mid(Temp(i), 4, 1) <> "-" Then
                coderecu = Left(Temp(i), 3)
                MsgBox coderecu
                Select Case coderecu
                        Case "220"  ' On précise le mot de passe
                            MsgBox "Service pret pour un nouvel utilisateur"
                       
                        Case "331"
                            MsgBox "L'utilisateur est correct, préciser le mot de passe"
                            SckFtp.SendData "PASS " & "usr_ftp" & vbCrLf
                                                       
                        Case "230"
                            MsgBox "L'utilisateur est bien authentifié, connexion OK"
                            ' Demande de connexion en mode Passif
                            SckFtp.SendData "PASV" & vbCrLf
                       
                        Case "227" 'Passive mode accepté
                            MsgBox "Passive mode accepté"
                        
                            ' On va récupèrer le port auquel on va connecter le socket de données
                            Temp = Split(txtrecu, ")")
                            Temp = Split(Temp(0), "(")
                            Temp = Split(Temp(1), ",")
                            Port = CLng(Temp(4)) * 256 + CLng(Temp(5))
                           
                           
                            Open "c:\test.txt " For Binary Access Read Lock Read Write As #1
                            StrBuffer = Input(LOF(1), #1)
                            Close #1
                           
                            SckUp.Connect "localhost", Port
                            SckFtp.SendData "STOR Test.txt"
                      
                            'SckUp.Connect "localhost", Port
                           
                            'SckFtp.SendData "STOR " & "\test.txt" & vbCrLf
                           
                         Case "150" 'le serveur accepte la connection
                                SckFtp.SendData StrBuffer & vbCrLf
                                'Voila, le serveur recoit le fichier

                        Case "221" 'Déconnection
                            SckFtp.Close
                           
                        Case "226" 'transfert terminé pour le sckdata ou scup (reception du LIST)
                                SckData.Close
                                SckData.Connect "localhost", Port
                                SckFtp.SendData "LIST" & vbCrLf
                                Etat = "LIST"
                               
                        Case Else
                            MsgBox "Autre code :" & coderecu
                           
                End Select
            End If
        Next i
End Sub
Public Sub Sckup_Connect()
MsgBox "Sckup_Connect"
SckUp.SendData StrBuffer & vbCrLf
MsgBox StrBuffer
End
End Sub

<---- Fin du code ---->

Merci à tous ceux qui pourront m'indiquer des anomalies!!

A+++

Akita

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 oct. 2006 à 18:39
Salut
Je n'ai pas de serveur ftp sous la main, mais il faudrait nous dire jusqu'où cela fonctionne.
- Identification par user et password : Ok ?
- Demande de mode passive : Ok ?
  Quelle réponse renvoit-il ?
  Le n° de port est-il cohérent ?
- Ensuite, tu envoies le fichier sur le 1er socket : A quoi te sert SckUp ?
  Vérifie s'il ne foudrait pas plutôt l'envoyer grace à SckUp ...
- Qu'est ce que c'est que SckData ?
  D'où sort-il ? comment est-il initialisé / utilisé ?
- Dans le "Open" du fichier, "Lock Read Write" ne sert à rien (pas gènant)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on
0
Akita95 Messages postés 23 Date d'inscription dimanche 13 mars 2005 Statut Membre Dernière intervention 30 juillet 2007
10 oct. 2006 à 13:16
Salut et désolé pour la réponse tardive.

Le code est ok jusqu'à l'acceptation du passive mode, après être passé en passive mode les commandes utilisées pour envoyer le fichier ne fonctionnent pas... :-(

Pour tout ce processus j'ai suivi différent codes trouvés sur vbfrance à savoir :
- http://www.vbfrance.com/codes/WINSOCK-FTP-TUTORIEL_30803.aspx
- http://www.vbfrance.com/codes/CONNEXION-FTP-CONTROL-WINSOCK_2374.aspx

J'utilise un "mix" des deux codes, cela devrait fonctionner mais je ne comprends pas pourquoi!

Merci d'avance si vous pouvez m'aider ;)

A++

Akita
0
Rejoignez-nous