comtention
Messages postés85Date d'inscriptiondimanche 11 avril 2004StatutMembreDernière intervention10 janvier 2010
-
23 juin 2006 à 15:17
comtention
Messages postés85Date d'inscriptiondimanche 11 avril 2004StatutMembreDernière intervention10 janvier 2010
-
25 juin 2006 à 00:55
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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 23 juin 2006 à 18:33
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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 23 juin 2006 à 18:37
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 !
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 23 juin 2006 à 18:40
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.
comtention
Messages postés85Date d'inscriptiondimanche 11 avril 2004StatutMembreDernière intervention10 janvier 2010 23 juin 2006 à 19:22
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
comtention
Messages postés85Date d'inscriptiondimanche 11 avril 2004StatutMembreDernière intervention10 janvier 2010 24 juin 2006 à 17:21
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à?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 25 juin 2006 à 00:51
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
comtention
Messages postés85Date d'inscriptiondimanche 11 avril 2004StatutMembreDernière intervention10 janvier 2010 25 juin 2006 à 00:55
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?