Class pour transferer des fichiers via winsock avec controles pendant le transfert

Soyez le premier à donner votre avis sur cette source.

Vue 9 942 fois - Téléchargée 1 907 fois

Description

Salut à tous,

suite à mon tutorial sur Winsock, j'ai souvent eu l'impression que sur ce site, les "bonnes" sources mettant en scène les transferts de fichiers via Winsock sont synonymes du Saint-Gral !

Je n'ai pas la prétention de dire que cette class de transfert est le Saint-Gral, toutefois, c'est comme cela que j'envisage, pour ma faible personne, de transférer des fichiers en réseau via Winsock.

Dans l'archive fournie se trouve la dite class ainsi qu'un Form la mettant en jeu, afin de démontrer sommairement son utilisation.

Sachez toutefois :
- qu'elle transfert bien évidement n'importe quel fichier, de n'importe quel taille (j'ai honte d'utiliser cela comme argument tellement cela m'apparait normal, mais vu que c'est souvent annoncé sur les autres sources du même type, je ne veux pas effrayer ceux qui en ont l'habitude ;) )
- le transfert s'effectue par bloc, par tampon donc, dont la taille est paramétrable par argument (je propose tout de même une valeur par défaut, l'argument devenant donc optionnel)
- une vérification sommaire du bloc qui vient d'être transmis est effectué, si bien qu'il n'est écrit dans le fichier de destination par la partie "reception" que si la partie "envoi" l'affirme (sans quoi le bloc est réexpédié, puis soumis à un nouveau contrôle etc..)
- le transfert ne prend pas 100% des ressources machine comme certains nous en agrémente via leur boucle d'envoi / réception
- l'accusé de réception est la méthode utilisée pour faire poursuivre le transfert, et pas le bête doevents qui va toujours finir, via WAN, par engorger le canal de transfert et faire passer des données accolées alors qu'elles n'auraient jamais du l'être (bloc à bloc)

La class est la même pour la partie envoie comme pour la partie réception, voici ses méthodes :

- Recevoir(ByRef ControleWinsock As Winsock, ByVal Fichier As String) As Boolean
- Envoyer(ByRef ControleWinsock As Winsock, ByVal Fichier As String, Optional ByVal TailleTampon As Integer = 4096) As Boolean
- Function ActionEnCours() As TypeAction
- Sub AnnulerAction()

et ses évenements :

- Event EnvoiEnCours(ByVal TotalOctetsEnvoyes As Long)
- Event ReceptionEnCours(ByVal TotalOctetsRecus As Long)
- Event EnvoiTermine(ByVal TotalOctetsEnvoyes As Long)
- Event ReceptionTermine(ByVal TotalOctetsRecus As Long)

Conclusion :


J'espère que cela vous servira, en appli comme en pédagogie.
Pour mieux comprendre la partie réseau, référez vous au tutorial Winsock (cliquez sur le lien pour afficher mes autres sources).
Pour mieux comprendre la partie fichier, référez vous au tutorial Fichier (cliquez sur le lien pour afficher mes autres sources).

N'ayant pas testé la class (je l'ai faite pour m'occuper et pour VOUS aider ;) ), je vous serais très reconnaissant de m'annoncer les problèmes que vous rencontrerez.

Bien entendu, si vos commentaires pouvaient également contenir autre chose que des problèmes rencontrés, je vous en serais également gré ;)

@+
Celiphane

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
4
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
26 février 2010

Re-bonjour. J'ai repris le temps de faire mes tests correctement et il se trouve que ta classe correspond parfaitement à mes besoins !

Dommage que j'ai noté trop vite...Mais ta source mérite bien un 9/10. Merci à toi d'avoir prit le temps de faire ca.
Messages postés
4
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
26 février 2010

Bonjour. Je débute dans l'utilisation des Winsocks et ta classe m'a intéressée. Cependant, j'aimerai comprendre l'intérêt de la ligne suivante dans la procédure d'envoi :

Tampon = Space$(LenTampon)

Dans tous les cas, ca m'a donné un coup de pouce pour faire un client FTP. Me restera le serveur.
Messages postés
8
Date d'inscription
samedi 23 décembre 2006
Statut
Membre
Dernière intervention
15 juin 2008

merciii
Messages postés
86
Date d'inscription
mardi 31 août 2004
Statut
Membre
Dernière intervention
19 août 2008

Je ne sais pas accéder au site :| Erreur 404
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
utilises la classe Winsock présente sur www.vbip.com, elle est bien plus efficace et sure que ce bon vieux controle Winsock.

voir aussi l'API TransmitFile qui s'appuie sur une connexion winsock dont on passe le handle
Afficher les 36 commentaires

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.