Accueil > > > CLIENT FTP WINSOCK (PROTOCOLE FTP)
CLIENT FTP WINSOCK (PROTOCOLE FTP)
Information sur la source
Description
Ci joint un petit client ftp fais avec winsock!!! Il est très basic, mais après plusieurs essaie avec inet infructueux !!! et surtout les contraintes comme l'impossibilité d'utiliser des chemins de fichiers ou mm des noms de fichiers avec espace dans la ligne de commande "Execute GET ou PUT", je me suis mit a étudier la RFC FTP et utiliser WInsock pour mes opérations sur ftp!!! Après Test, je trouve winsock plus stable et moins contraignant bien que plus compliqué que inet !!! Ci joint une capture et le projet VB!!!! Ci dessous qq. Explications sur le fonctionnement de mon appli et du protocole FTP, je dis explications en toute modestie et non "Tuto!!!!" Si vous avez des questions ou si vous avez vu une erreur de ma part "Personne n'est parfais!!!", signalez le moi!!!! les Commandes utilisées : Renomer (dossier ou fichier), liste des fichiers, cretaion de dossier, suppression de dossier, Téléchargement Envoie de fichier avec Progress bar. Le code est a améliorer, comme par exemple la supression de dossier non vide ou les opérations sur plusieurs fichiers etc.... mais c'est déja une bonne base je pense ? pour un client Ftp Maison...
Source
- 1. CONNECTION ET IDENTIFICATION
-
- On Utilise un ctrl winsock : SckFtp envoie les commandes et réceptionne la réponse serveur)
-
- SckFtp.Connect "Serveur ftp", "Port en général 21"
-
- On envoie les commandes pour s'identifier avec la socket SckFtp
-
- SckFtp.SendData "USER " & Login & Vbcrlf
- SckFtp.SendData "PASS " & Password & vbCrLf
-
- On envoie la demande de connexion en mode Passif
-
- SckFtp.SendData "PASV" & vbCrLf
-
- 2. RECEPTION REPONSES SERVEUR
-
- On recupére les réponses serveur dans le sckFtp (Evénement Data_Arrival)
-
- Dim TxtRecu as string
- SckFtp.GetData TxtRecu , VbString
-
-
- Attention la réponse renvoyé peu être multi ligne donc il faudra découpé
- La variable TxtRecu avec un split sur le chr(10)
- dans un tableau par exemple!!!
-
- Les réponses sont sous la forme :
-
- 215 UNIX Type: L8
- 227 Entering passive mode (82,196,4,13,9,10)
- 150 Connection established for the data.
- 226-Fichiers utilises: 10/4000
- 226-Volume utilise: 1401036/104857600
- 226 Transfer ended
-
- Lorsque le 4 éme caractère n'est pas un "-" alors c'est un code correspondant
- a une réponse du serveur, sinon ce sont des commentaires.
-
- 3. TRAITEMENT DES REPONSES SERVEUR
-
- En fonction des codes reçus on fait une action, on analyse les 3 premiers caractère de TxtRecu (DataArrival de SckFtp)
-
-
- Ici à l'ouverture de la connexion on attend l'acceptation du mode passif
- (Code 227) :
-
- 227 Entering passive mode (81,191,4,13,9,10)
-
- Et on extrait le port pour le transfert de données émit par le serveur.
-
- Les 4 premiers chiffres entre parenthèse correspondent à votre IP 81.191.4.13
- Pour connaître le port il faut extraire les 2 derniers chiffres entre
- Parenthèses ici : 9 et 10
-
- Ensuite on multiplie le Premier par 256 et on ajoute le 2éme
- Donc ici (9*256)+10 = 2314 est le port pour le sock des données
- (Réception texte, fichier ou envoie)
-
- On a maintenant récupéré le Port, on va donc connecter le socket de données que l'on nome SckData
-
- SckData.Connect "Serveur", "Port dans cet ex : 2314)
-
- Et avec le socket sckFtp on envoie la commande List
-
- SckFtp.SendData "LIST" & vbCrLf
-
- Ensuite pour récupérer la liste de fichier il suffit de la récupérer dans le socket SckData (Evenement DataArrival)
-
- Dim StrString As String
- SckData.GetData StrString, vbString, bytesTotal
-
- StrString contient maintenant la liste des fichiers :
-
-
- drwxr-xr-x 1 bob5959 bob5959 0 Apr 15 18:12 Dossier
- -rw-r--r-- 1 bob5959 bob5959 1 Apr 15 15:50 azer.jpg
- -rw-r--r-- 1 bob5959 bob5959 20993 Apr 15 15:52 demande movie.doc
- -rw-r--r-- 1 bob5959 bob5959 16384 Apr 15 15:57 demande movie2.doc
- -rw-r--r-- 1 bob5959 bob5959 16384 Apr 15 15:57 image19(51).JPG
- -rw-r--r-- 1 bob5959 bob5959 94534 Apr 15 16:06 image6(27).JPG
- -rw-r--r-- 1 bob5959 bob5959 46090 Apr 15 15:17 interface.jpg
- -rw-r--r-- 1 bob5959 bob5959 8192 Apr 15 16:02 menudiapo(11).jpg
- -rw-r--r-- 1 bob5959 bob5959 16384 Apr 15 15:51 Sans titre.JPG
-
- Autorisation Taille Date Fichier/dossier
-
- Ensuite il est facile d'extraire les données utiles pour le soft
-
- Il est important de récupérer les noms de fichier avec leur taille,
- en vu d'un téléchargement!
-
- J'ai donc stocké chaque taille respectivement dans un tableau et chaque nom est affiché dans un listbox
-
- Pour les dossiers je rajoute un "/" devant.
-
- Pour les autres cas, l'action effectué sera en fonction du code envoyer par le serveur, Exemple :
-
- On envoie la commande Mkd (Création d'un nv dossier sur le serveur) avec SckFtp
-
- SckFtp.SendData "Mkd Nouveau Dossier" & vbCrLf
-
- Réponse dans l'évenement DataArrival de SckFtp
-
- 257 Ok
-
- Alors on relance la commande LIST afin de réafficher la liste des fichiers....
-
- ETc.....
-
- PS : Les commandes sont disponibles dans la RFC (Français)
- http://www.eisti.fr/res/res/rfc959/959-4_inter_fr.dim?session=101609#4.1.2
-
-
- TELECHARGEMENT
- ==============
-
- Dans mon code j'utilise la sock : SckDl
-
- Il faut utiliser la commande "RETR" que l'on envoie avec SckFtp
-
- Mais auparavant il faut définir le Type
-
- SckFtp.SendData "TYPE I" & vbCrLf
-
- Ensuite on attend la réponse du serveur (DataArrival de Sckftp)
-
- 200 Set Type I
-
- Et on connecte la socket Sckdl au serveur et au port, et on envoie la commande RETR (Téléchargement)
-
- SckDl.Connect "Sereveur", "Port (2314)"
- SckFtp.SendData "Retr " & Fichier.ext & vbCrLf
-
- Le serveur renvoie dans la SOcket SckFtp :
-
- 150 Connection established for the data.
-
- 226 Transfer ended
-
- Le fichier arrive dans la socket SckDl (Evenement dataArrival) et on stocke le fichier dans StrBuffer
-
- Dim Temp As String
- SckDl.GetData Temp
- StrBuffer = StrBuffer & Temp
-
- Et on vérifie si la taille de buffer est égal a la taille du fichier télécharger,
- Si c'est le cas alors le téléchargement et terminé, et on écrit le fichier
- La Taille (TailleFic) à été récupérer dans le tableau en traitant la commande LIST
-
- If Len(StrBuffer) = TailleFIc Then
- Open "c:\fichier Télécharger.ext" for output as #1
- Print #1, StrBuffer
- Close #1
- SckDl.close 'on ferme le sock
- End if
-
-
-
- UPLOAD
- ======
-
- Dans le code j'utilise la sock : Sckup
-
- Il faut utiliser la commande "STOR"
-
- Mais auparavant il faut stocker le fichier dans le buffer (StrBuffer), pour cela on l'ouvre en mode binaire :
-
- Open "Le fichier a envoyer.ext " For Binary Access Read Lock Read Write As #1
- StrBuffer = Input(LOF(1), #1)
- Close #1
-
- Ensuite on envoie la commande STOR au serveur avec la sckFtp :
-
- SckFtp.SendData "STOR " & 'Nom du fichiers dur le serveur.ext' & vbCrLf
-
- Et on connecte la sock sckup au serveur :
-
- SckUp.Connect "Serveur", "Port (2314)"
-
- Ensuite des que la sock sckup est connecté, on envoie le fichier qui se trouve dans le Buffer(StrBuffer):
-
- SckUp.SendData StrBuffer & vbCrLf
-
- Dans l'événement SendProgress de la sock sckup , bytesRemaining permet de récupérer l'avancement :
-
- Label1= Len(StrBuffer) - bytesRemaining
-
- Et Pour savoir si l'envoie est terminé :
-
- If bytesRemaining = 0 Then
- sckUp.Close 'On ferme la sock
- Msgbox "Envoie terminé..."
- End if
-
-
- Pcpunch!!!!!
1. CONNECTION ET IDENTIFICATION
On Utilise un ctrl winsock : SckFtp envoie les commandes et réceptionne la réponse serveur)
SckFtp.Connect "Serveur ftp", "Port en général 21"
On envoie les commandes pour s'identifier avec la socket SckFtp
SckFtp.SendData "USER " & Login & Vbcrlf
SckFtp.SendData "PASS " & Password & vbCrLf
On envoie la demande de connexion en mode Passif
SckFtp.SendData "PASV" & vbCrLf
2. RECEPTION REPONSES SERVEUR
On recupére les réponses serveur dans le sckFtp (Evénement Data_Arrival)
Dim TxtRecu as string
SckFtp.GetData TxtRecu , VbString
Attention la réponse renvoyé peu être multi ligne donc il faudra découpé
La variable TxtRecu avec un split sur le chr(10)
dans un tableau par exemple!!!
Les réponses sont sous la forme :
215 UNIX Type: L8
227 Entering passive mode (82,196,4,13,9,10)
150 Connection established for the data.
226-Fichiers utilises: 10/4000
226-Volume utilise: 1401036/104857600
226 Transfer ended
Lorsque le 4 éme caractère n'est pas un "-" alors c'est un code correspondant
a une réponse du serveur, sinon ce sont des commentaires.
3. TRAITEMENT DES REPONSES SERVEUR
En fonction des codes reçus on fait une action, on analyse les 3 premiers caractère de TxtRecu (DataArrival de SckFtp)
Ici à l'ouverture de la connexion on attend l'acceptation du mode passif
(Code 227) :
227 Entering passive mode (81,191,4,13,9,10)
Et on extrait le port pour le transfert de données émit par le serveur.
Les 4 premiers chiffres entre parenthèse correspondent à votre IP 81.191.4.13
Pour connaître le port il faut extraire les 2 derniers chiffres entre
Parenthèses ici : 9 et 10
Ensuite on multiplie le Premier par 256 et on ajoute le 2éme
Donc ici (9*256)+10 = 2314 est le port pour le sock des données
(Réception texte, fichier ou envoie)
On a maintenant récupéré le Port, on va donc connecter le socket de données que l'on nome SckData
SckData.Connect "Serveur", "Port dans cet ex : 2314)
Et avec le socket sckFtp on envoie la commande List
SckFtp.SendData "LIST" & vbCrLf
Ensuite pour récupérer la liste de fichier il suffit de la récupérer dans le socket SckData (Evenement DataArrival)
Dim StrString As String
SckData.GetData StrString, vbString, bytesTotal
StrString contient maintenant la liste des fichiers :
drwxr-xr-x 1 bob5959 bob5959 0 Apr 15 18:12 Dossier
-rw-r--r-- 1 bob5959 bob5959 1 Apr 15 15:50 azer.jpg
-rw-r--r-- 1 bob5959 bob5959 20993 Apr 15 15:52 demande movie.doc
-rw-r--r-- 1 bob5959 bob5959 16384 Apr 15 15:57 demande movie2.doc
-rw-r--r-- 1 bob5959 bob5959 16384 Apr 15 15:57 image19(51).JPG
-rw-r--r-- 1 bob5959 bob5959 94534 Apr 15 16:06 image6(27).JPG
-rw-r--r-- 1 bob5959 bob5959 46090 Apr 15 15:17 interface.jpg
-rw-r--r-- 1 bob5959 bob5959 8192 Apr 15 16:02 menudiapo(11).jpg
-rw-r--r-- 1 bob5959 bob5959 16384 Apr 15 15:51 Sans titre.JPG
Autorisation Taille Date Fichier/dossier
Ensuite il est facile d'extraire les données utiles pour le soft
Il est important de récupérer les noms de fichier avec leur taille,
en vu d'un téléchargement!
J'ai donc stocké chaque taille respectivement dans un tableau et chaque nom est affiché dans un listbox
Pour les dossiers je rajoute un "/" devant.
Pour les autres cas, l'action effectué sera en fonction du code envoyer par le serveur, Exemple :
On envoie la commande Mkd (Création d'un nv dossier sur le serveur) avec SckFtp
SckFtp.SendData "Mkd Nouveau Dossier" & vbCrLf
Réponse dans l'évenement DataArrival de SckFtp
257 Ok
Alors on relance la commande LIST afin de réafficher la liste des fichiers....
ETc.....
PS : Les commandes sont disponibles dans la RFC (Français)
http://www.eisti.fr/res/res/rfc959/959-4_inter_fr.dim?session=101609#4.1.2
TELECHARGEMENT
==============
Dans mon code j'utilise la sock : SckDl
Il faut utiliser la commande "RETR" que l'on envoie avec SckFtp
Mais auparavant il faut définir le Type
SckFtp.SendData "TYPE I" & vbCrLf
Ensuite on attend la réponse du serveur (DataArrival de Sckftp)
200 Set Type I
Et on connecte la socket Sckdl au serveur et au port, et on envoie la commande RETR (Téléchargement)
SckDl.Connect "Sereveur", "Port (2314)"
SckFtp.SendData "Retr " & Fichier.ext & vbCrLf
Le serveur renvoie dans la SOcket SckFtp :
150 Connection established for the data.
226 Transfer ended
Le fichier arrive dans la socket SckDl (Evenement dataArrival) et on stocke le fichier dans StrBuffer
Dim Temp As String
SckDl.GetData Temp
StrBuffer = StrBuffer & Temp
Et on vérifie si la taille de buffer est égal a la taille du fichier télécharger,
Si c'est le cas alors le téléchargement et terminé, et on écrit le fichier
La Taille (TailleFic) à été récupérer dans le tableau en traitant la commande LIST
If Len(StrBuffer) = TailleFIc Then
Open "c:\fichier Télécharger.ext" for output as #1
Print #1, StrBuffer
Close #1
SckDl.close 'on ferme le sock
End if
UPLOAD
======
Dans le code j'utilise la sock : Sckup
Il faut utiliser la commande "STOR"
Mais auparavant il faut stocker le fichier dans le buffer (StrBuffer), pour cela on l'ouvre en mode binaire :
Open "Le fichier a envoyer.ext " For Binary Access Read Lock Read Write As #1
StrBuffer = Input(LOF(1), #1)
Close #1
Ensuite on envoie la commande STOR au serveur avec la sckFtp :
SckFtp.SendData "STOR " & 'Nom du fichiers dur le serveur.ext' & vbCrLf
Et on connecte la sock sckup au serveur :
SckUp.Connect "Serveur", "Port (2314)"
Ensuite des que la sock sckup est connecté, on envoie le fichier qui se trouve dans le Buffer(StrBuffer):
SckUp.SendData StrBuffer & vbCrLf
Dans l'événement SendProgress de la sock sckup , bytesRemaining permet de récupérer l'avancement :
Label1= Len(StrBuffer) - bytesRemaining
Et Pour savoir si l'envoie est terminé :
If bytesRemaining = 0 Then
sckUp.Close 'On ferme la sock
Msgbox "Envoie terminé..."
End if
Pcpunch!!!!!
Conclusion
Ps : Durand je télécharge certain fichier (en général les fichier plus de 200Ko), j'ai une erreur "502 Fichier non ouvert" qui revient du serveur!!!
Apres plusieurs tentatives de déboguage, j'ai testé avec mon client ftp "total commander" qui lui aussi me renvoie la mm erreur. Donc apparemment ce n'est pas le code qui est en cause mais plutôt le serveur FTP (Testé sur un ftp Ifrance)
Si qq sait pourquoi, ou si vous avez le mm problème alors qu'avec un autre client Ftp le problème ne se pose pas, faite le moi savoir SVP!!!!
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|