Winsock upload ftp [Résolu]

Signaler
Messages postés
85
Date d'inscription
dimanche 11 avril 2004
Statut
Membre
Dernière intervention
10 janvier 2010
-
Messages postés
85
Date d'inscription
dimanche 11 avril 2004
Statut
Membre
Dernière intervention
10 janvier 2010
-
Bon voila sa fait une semaine que je me prend la tête sur ce code, que je le fait refait rerefait et que je cherche d'autre source et je n'arrive toujours pas. Mon probleme est que le serveur ne me donne pas de message quand ta l'acceptation de la connection pour uploader un fichier. Il devrais me retourner une valeur "150". voici mon code. Wins = winsock general et Wins2 = winsock pour uploader

Private Sub Form_Load()
Wins.Connect "ftpperso.free.fr", 21
End Sub


Private Sub Wins_Connect()
Wins.SendData "USER " & "LOGIN" & vbCrLf
End Sub




Private Sub Wins_DataArrival(ByVal bytesTotal As Long)
Wins.GetData recu, vbString
code = Left(recu, 3)
MsgBox recu


If code = 331 Then 'le serveur demande le pass
Wins.SendData "PASS " & "MDP" & vbCrLf
End If


If code = 230 Then 'les serveur accepte le pass
Wins.SendData "PASV" & vbCrLf
End If


If coderecu = 227 Then 'le serveur autorise le mode passif


Dim Temp As Variant, FtpDataRemotePort As Variant
Temp = Split(recu, ")")
            Temp = Split(Temp(0), "(")
            Temp = Split(Temp(1), ",")
            FtpDataRemotePort = CLng(Temp(4)) * 256 + CLng(Temp(5))
           




Wins2.SendData "STOR " & "gauth.jpg" & vbCrLf

End if

If code = 150 Then 'le serveur autorise la connection (se que j n'ai pas)
Wins2.Connect "ftpperso.free.fr", FtpDataRemotePort
End If

Merci d'avance !!!

7 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Salut
C'est normal, ta variable FtpDataRemotePort a perdu son contenu entre la réponse 227 et la réponse 150.
Régles de base :
- Il est précaunisé de dimensionner toutes les variables. C'est lourd au début, mais ça t'oblige à reflechir à l'étendue de la variable (lisible uniquement dans la procédure, dans toute la forme, dans tout le projet ...) --> Menu Outils, Options, onglet général + "Déclaration des variables obligatoires".
Ca ajoutera un "Option Explicit" tout seul à chaque création de forme, module et autres ...

- Il faut dimensionner les variables en tête de procédure (pas dans un If)

- Eviter d'utiliser Variant à tour de bras, ça alloudit la compilation. Utilise des types réels :
   Temp est un tableau de chaine ---> Dim Temp() As String

- Il faut dimensionner FtpDataRemotePort en Static afin qu'elle garde sa valeur entre deux scrutations de la procédure :
   FtpDataRemotePort ne peut avoir que des valeurs entre 0 et 65535 --> Long
   Static FtpDataRemotePort As Integer

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'accro
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
De plus, tu ne peux pas envoyer de données avant d'être connecté.
Le  Wins2.SendData "STOR " & "gauth.jpg" & vbCrLf   dans le code 230 doit générer une erreur.
Si tu ne l'as pas vu, c'est que tu dois avoir un  On Error Resume Next  quelque part. Supprime le : Ce n'est pas en fermant les yeux que ça marchera mieux !
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Toujours le problème des variables (que tu n'aurais pas loupé si tu avais obligé la déclaration) :
If coderecu = 227 Then
ne peut pas fonctionner : CodeRecu n'est pas une variable connue, c'est code tout court

En parlant de la variable 'code', tu lui affecte une chaine et après tu l'exploite dans les IF comme un chiffre.
Ca va marcher, mais ce n'est pas propre. C'est VB qui fait tout le boulot de compréhension.
A un moment ou un autre, ça te jouera un mauvais tour.
Messages postés
85
Date d'inscription
dimanche 11 avril 2004
Statut
Membre
Dernière intervention
10 janvier 2010

Oui c'est une habitude que j'ai plus ou moins perdu de déclarer correctement mes variables, merci de m'avoir remis a l'ordre.

Pour la variable "CodeRecu" elle appartient a une autre source je n'ai pas fait attention, j'ai telement essaillier de refaire la source que je me suis un peu embrouillier.

Pour le Wins2.SendData "STOR " & "gauth.jpg" & vbCrLf il n'y a pas d'erreur mais le se n'est pas Wins2 qui fait la demande mais Wins.

Voila merci beaucoups a bientot.
Messages postés
85
Date d'inscription
dimanche 11 avril 2004
Statut
Membre
Dernière intervention
10 janvier 2010

Et c'est normal que quand j'envoi une image genre (400Ko) elle n'arrive pas intact? Les couleur sont diférentes et elle est décallée a plusieur endroit. Comment puis-je regler celà?

Merci d'avance
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Re
Si elle n'arrive pas intacte, c'est qu'elle est mal traitée.
Il y a des entaines de questions sur le forum à propos de l'expédition de fichier par Winsock.
En gros : La réception d'n Winsock se déclenche quand il y a quelque chose dans le buffer, pas seulement quand la transmission des données est terminée. Il faut donc mémoriser le contenu et additionner ce qui arrive au fur et à mesure + détecter la fin des données.
Tout ceci est largement décrit dans le forum ET dans les sources qui parlent de transférer des données par winsock.

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'accro
Messages postés
85
Date d'inscription
dimanche 11 avril 2004
Statut
Membre
Dernière intervention
10 janvier 2010

Ouai mais quand j'envoi au serveur FTP je peux pas controler se qu'il recoi, fin je peu pas additionner ce qui est arrivé. C'est au serveur de gerer sa non?