Soyez le premier à donner votre avis sur cette source.
Vue 9 677 fois - Téléchargée 2 066 fois
' Cette source explique comment telecharger un fichier d'un ordinateur distant, a laide de WINSOCK ' Ele utilise la methode des PACKETS (découpage des fichiers en parties d'une taille définie) ' Plus la taille des packets est grande, plus le transfert sera rapide, cependant, la stabilit sera réduite. Option Explicit ' Declaration de variables obligatoire, pour eviter des erreurs Dim Numero_Fichier As Integer ' Variable qui contiendra le nomero du fichier qu'on traitera sur le module distant Dim Numero_Fichier2 As Integer ' Variable qui contiendra le nomero du fichier qu'on traitera sur le module local Dim OUSTOCKER As String 'Variable qui contiendra l'emplacement local ou on stockera le fichier recu Dim TitreFichier ' Declaration de variable qui contiendra le titre du fichier (ex : fichier.txt) Dim TailleFichier As Long ' Variable qui contiendra la taille du fichier Sub PrendreFichier(ByVal FICHIER As String, ByVal OUSTOCKERLEFICHIER As String) ' Procedure d'envoi de fichier LocalSock.SendData "GET " & FICHIER ' On envoi la demande de reception du fichier OUSTOCKER = OUSTOCKERLEFICHIER ' OUSTOCKER prend le chemin du dossier on on mettra le fichier en local, une fois recu TitreFichier = Right(FICHIER, InStr(1, StrReverse(FICHIER), "\") - 1) ' On prend, dans le nom de fichier, de la droite jusqu'a ce quon tombe sur le \, et on garde tout ce qui est a droite, soit, le nom du fichier et son extension, sans le chemin End Sub ' Fin de procedure Private Sub Connect_Click() ' Se produit lors du click sur le bouton Connect (connecter) LocalSock.Connect LocalSock.LocalHostName, 20000 ' On connecte le socket local au socket distant, sur le meme port et le meme host, on devient CLIENT 'NOTE : ici, on a connecter le socket local sur LOCALHOSTNAME (sur la machine locale), pour une utilisation a distance, remplacez-le par le nom dhote ou le IP de lordi distant End Sub ' Fin de procedure Private Sub DistantSock_ConnectionRequest(ByVal requestID As Long) ' Se produit lorsque le module distant recoit une demande de connection. DistantSock.Close ' On ferme lécoute pour pouvoir etablir une connexion DistantSock.Accept requestID ' on accepte la connection End Sub ' Fin de procedure Private Sub DistantSock_DataArrival(ByVal bytesTotal As Long) ' Evenement se produisant lorsque socket distant recoit des données... Dim Donnees_Recues As String 'Donnees_recues est la variable ou on stockera les données recues. Dim NomFichier As String ' Variable qui contiendra le nom du fichier a lire. Dim Buf As String ' Variable qui servira pour recuperer les octets du fichier DistantSock.GetData Donnees_Recues ' On stocke les données recues dans la variable Donnees_Recues If Left(Donnees_Recues, 3) = "GET" Then ' CONDITION - Si les 3 premieres lettres de la chaine recue sont GET (demande de fichier) Numero_Fichier = FreeFile ' On assigne un numero de fichier libre a Numero_Fichier NomFichier = Right(Donnees_Recues, Len(Donnees_Recues) - 4) ' Ici, on recupere le nom de fichier de la commande GET, pour cela, on prend tout depuis la droite et on enleve les 4 premiers caracteres (le GET et l'espace qui suit), et il nous reste le nom du fichier. Open NomFichier For Binary Access Read As #Numero_Fichier ' On ouvre le fichier pour le lire. DistantSock.SendData "PRET " & LOF(Numero_Fichier) ' On envoie la confirmation d'ouverture du fichier au module local, ainsi que la taille du fichier ouvert en octets, pour la barre de progression. ElseIf Donnees_Recues = "NXT" Then ' Si la condition précédente n'est pas remplie et que on a recu la comande de packet suivant... Select Case LOF(Numero_Fichier) - Seek(Numero_Fichier) + 1 ' On choisit en fonction des octets du fichier restants, qu'on n'a pas encore lus. Case Is >= 2048 ' Si la taille restante est uperieure ou egale a 2048 Buf = Space(2048) ' Buf est le buffer, qu'on INITIALIZE (on le remplit despaces, 2048, dans ce cas, vous pouvez évidemment le modif) Get #Numero_Fichier, , Buf ' On recupere les 2048 caracteres du fichier suivants, dans la variable BUF. DistantSock.SendData Buf ' On envoie ce qu'on a recupéré au module local. Case Is < 1 ' Si tout le fichier a été lu Close #Numero_Fichier ' on ferme le fichier DistantSock.SendData "FIN" ' on envoie la comande de Fin de fichier Case Else ' Si toutes les conditions précédentes ne sont pas remplies (si la taille restante est >=1 et <2048) Buf = Space(LOF(Numero_Fichier) - Seek(Numero_Fichier) + 1) ' On initialize le buffer avec le nombre d'espaces corespondant au nombre de caracteres restant Get #Numero_Fichier, , Buf ' On recupere les caracteres restants du fichier dans la variable BUF. DistantSock.SendData Buf ' On envoie ce qu'on a recuperrer End Select ' fin de la selection End If ' Fin de condition End Sub ' Fin de procedure Private Sub Form_Load() ' Evenement se produisant lorsque la feuille (form), FORM1 est chargée. DistantSock.LocalPort = 20000 ' on met le port d'ecoute du socket distant a 20000 DistantSock.Listen ' on le fait ecouter (attendre une demande de connxion), il devient SERVER End Sub 'Fin de procedure Private Sub LocalSock_DataArrival(ByVal bytesTotal As Long) ' Evenement se produisant lorsque socket local recoit des données... Dim Donnees_Recues As String 'Donnees_recues est la variable ou on stockera les données recues. LocalSock.GetData Donnees_Recues ' On stocke les données recues dans la variable Donnees_Recues If Left(Donnees_Recues, 4) = "PRET" Then ' CONDITION - Si les 4 premieres lettres de la chaine recue sont PRET (confirmation d'ouverture de fichier) Numero_Fichier2 = FreeFile ' On assigne un numero de fichier libre a Numero_Fichier TailleFichier = Right(Donnees_Recues, Len(Donnees_Recues) - 5) ' Ici, on recupere la taille de fichier de la commande PRET, pour cela, on prend tout depuis la droite et on enleve les 5 premiers caracteres (le PRET et l'espace qui suit), et il nous reste la taille du fichier. Open OUSTOCKER & "\" & TitreFichier For Output As #Numero_Fichier2 ' On cree le fichier ou on va ecrire. LocalSock.SendData "NXT" ' on envoie la demande de reception du packet suivant, puisqu'il n'y a pas de packet précedent, c'est le premier packet qu'on va recevoir. ElseIf Donnees_Recues = "FIN" Then ' si on recoit en revanche, la notification de fin de fichier... Close #Numero_Fichier2 ' On ferme le fichier Else ' Si on ne recoit ni la fin de fichier, ni la confirmation douverture, c'est qu'on recoit un packet (partie du fichier). Print #Numero_Fichier2, Donnees_Recues; ' On inscrit le packet dans le fichier ouvert 'NOTE : le ; a la fin, signifie qu'on ne va pas a la ligne, cette methode evite de stocker les packets dans une variable (en mémoire), ce qui accelere le telechargement, augmente la stabilité et les performances systeme ' De plus, les fichiers de type MP3, par exemple, peuvent etre lus pendant le telechargement ! LocalSock.SendData "NXT" ' On demande le packet suivant Progress.Width = BGProgress.Width / TailleFichier * LOF(Numero_Fichier2) ' On met a jour notre progressbar perso :) Percent.Caption = Round(100 / TailleFichier * LOF(Numero_Fichier2)) & "%" ' On met le pourcentage a jour End If ' Fin de condition End Sub ' Fin de procedure Private Sub Prendre_Click() ' Evenement se produisant lors du clik sur le bouton PRENDRE FICHIER On Error Resume Next ' On empechre l'arret du programme lors d'une erreur If LocalSock.State = sckConnected Then ' Si le socket local est connecter (condition) With Cmd ' WITH sert a racourcir le code, a enlever le nom d'objet qu'on doit ecrire eu debut. On n'utilisera qu'un simple point (ex : bouton.visible devient .visible) .DialogTitle = "Choisir fichier" ' On met un titre a la boite de dialogue .CancelError = True ' Si l'utilisateur annule, une erreur se produit .ShowOpen 'On affiche la boite de dialogue If Err Then Exit Sub ' Condition - si une erreur est detectee (l'utilisateur a fait "annuler"), on quitte la procedure, on n'execute pas tout le code restant dans celle-ci. PrendreFichier .FileName, InputBox("Tappez l'endroit ou stocker le fichier ex : C: ou C\Windows", "Chemin", "C:") ' On appelle la procédure PRENDREFICHIER (voir plus haut) en demandant ou enregistrer le fichier recu. End With ' Fin du WITH End If ' Fin de condition End Sub ' Fin de procedure
merci de ce code
je suit un debutant en vb j'ai utiliser votre code mais le probleme il n'execute pas le message donné "Methode ou nembre de donnée introvable" et jai pas compri se message
tu peut m'aide svp? merci davence
mon e-mail taoufiq_nejjar@hotmail.com
moi jai la 3.5 de lsd vraiment bien, je pourrais te lenvoyer avec ton programmes, mais fadrai ke tu me dize comment me connecter a ton ppc pour te lenvoyer :)
quand j'avais posté, s ame laissé pas mettre de exe.
donc g mi une extension bidon
donc le fichier sapelle anvoi fichier.a_renommer_an_exe
pour louvrir te suffit de le renommer en anvoi fichier.exe pui de lexécuté.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.