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

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

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.