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

Soyez le premier à donner votre avis sur cette source.

Vue 9 883 fois - Téléchargée 1 872 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

tbbuim1
Messages postés
940
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
3 février 2011
5 -
Pas mal, ton premier tuto, mais il manque cruellement d'exemple pour les débutants, même si c'est relativement bien expliqué. Celui là a un exemple, cool, mais dommage qu'il ne soit pas en deux parties, client/serveur, encore une fois, ça aurait été mieux pour les débutants. Mais sinon, c'est cool. C'est vrai qu'en regardant les autres sources, je me demandais pourquoi ils n'arrivaient pas à transférer de gros fichiers. lol
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007
-
Salut,

le tuto manque d'exemple ? Tu veux surement parler d'archive zip avec une illustration, parce que le tuto est justement entrecoupé d'exemples ;)
D'ailleurs, nombre sont ceux qui en le suivant à la lettre ont compris le winsock... ;) Débutants principalement :)

Cette source ne se veut pas être un exemple à lier avec mon tuto. C'est une class qui montre la bonne méthode pour transférer des fichiers sur des réseaux. Aussi, je ne comprends pas ce que les gens ont à vouloir absolument séparer les fonctionnalités client et serveur : déjà, ici, il n'y a PAS de client ni de serveur ! C'est une class pour transférer des fichiers, elle représente un tout, un protocole qui lui est propre pour d'une part envoyer et d'autre part recevoir. Bon passons. La question ne se pose donc même pas ici.
La vraie question est de savoir pourquoi les applications posées ici en exemple du winsock contiennent toujours 2 projets : le client et le serveur... mais c'est d'un inutile. Seules certaines applications nécessitent cette séparation, par exemple des logiciels de prise de main à distance, ou il n'est intéressant d'installer que la partie serveur chez le "client" (au sens clientèle), car il ne doit pas pouvoir utiliser le client (de l'application ;) ). Les autres séparations sont facilités (mauvaise structure de l'appli, complications fuies par le développeur).

Bon c'est mon avis, ma réaction à ton commentaire, qui quoi qu'il en soit, j'ai eu beaucoup de plaisir à lire. Je te remercie d'avoir testé et commenté ma source.
A bientôt sur nos futurs contributions ;)

@+
Celiphane
tbbuim1
Messages postés
940
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
3 février 2011
5 -
Oui, je parle EVIDEMMENT d'un zip dans le 1er tuto. Même s'il est vrai qu'ya plein de mini exemples...
Ensuite la séparation client/serveur est peut être inutile à tes yeux, en ce qui concerne les miens, je ne vois pas l'utilité de le garder sur une mm appli. qu'elle est l'intéret de se passer un fichier à soi même?! Ceux qui veulent faire des transferts de fichiers, sont, à mon humble avis, des gens qui se connecte à un ordi distant. D'où la constante séparation que tu vois d'habitude... C'est pour ça que je parlais de séparer celui qui envoi de celui qui reçoit... Maintenant, j'aimerais savoir dans quelle autre situation ta classe est utile, quelle est l'utilité de se passer un fichier à soi même, s'il est si inutile de faire une séparation? ça m'intéresse, puisqu'apparemment ça coule de source pour toi, donc éclaires-moi stp
D'autre part, tu parles du "bête DoEvents", pourtant tu en fais usage dans ton code... Il aurait été bien de justifier cette emploi par un commentaire, du coup, on ne voit pas trop pourquoi t'en a mis un, encore une fois c'est juste pour une meilleure compréhension. Ca n'enlève en rien la qualité du travail.
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007
-
olala, t'es un parleur toi ;)

je vais préciser ma pensé, et gentiment, parce que tu m'as tout l'air bien agressif non ?? :)

Tu penses trop au niveau utilisation de l'appli... en fait, je comprends pas vraiment comment tu raisonnes ? Tu développes ? A ce que je sache, quand tu fais par exemple une appli que tu vas distribuer, qui sert par exemple QUE à transférer des fichiers, c'est le freeware que les gens vont télécharger pour s'échanger des fichiers. Bon. Ba cette appli doit savoir envoyer ET recevoir des fichiers, par un protocole qu'elle reconnait... c'est ce que cette class fait. Elle t'aide en cela qu'elle est la solution clé en main pour transférer les fichiers. Tu comprends ?

<<qu'elle est l'intéret de se passer un fichier à soi même?!>>
...mais quel est le rapport ?? ;)
Elle sert pas à se passer un fichier à soi même ptdr.
C'est parceque l'exemple fait ça ? Tu comprends pas que c'est un exemple ? :o)
Bon je suis coupable, j'aurais dû penser avant de poser la source à faire un vrai contexte pour que les débutants comme toi comprennent que ça sert pas à s'envoyer un fichier à soi-même ;)

En fait, tu prends le source comme une appli, alors que ça n'en ai pas une. Cette source, tbbuim1, c'est la class, que tu peux utiliser où tu veux. C'est un objet, le fichier class. Le projet fourni est un exemple pour montrer comment elle s'utilise. (faites des efforts tiens, vous serez récompensé ;-) ).

C'est mon exemple d'utlisation de class... comment t'expliquer... imagine alors une appli dans laquelle en plus de dire quel fichier envoyer, on donne aussi l'adresse IP à laquelle se connecter... Tiens ba si tu veux, fait un inputbox sur le connect du winsock, et lance 2 fois l'appli, une sur un pc, une autre instance sur un autre... tu vois, ca transfert d'un pc à l'autre lol ;)

heu... je vois pas quoi dire d'autre à part que tu t'embrouilles surement un petit peu :)
Ya pas de mal ;)

Tu veux que je fasse un contexte réel et non pas simplement une démonstration de fonctionnalité, pour que tu vois mieux ? Demande moi, je suis tout disposé à t'aider !

@+
Celiphane

PS: pour le doevents, je l'utilise juste pour permettre au label qui affiche la progression en octets de se rafraichir et donc d'afficher leurs valeurs AVANT que les msgbox n'apparaissant (car elles sont modals). Ca N'A RIEN A VOIR avec la class, RIEN A VOIR AVEC LE SYSTEME DE TRANSFERT, une fois de plus, c'est JUSTE DANS la feuille qui montre par l'exemple COMMENT utiliser la class... apparament tu n'as pas compris cette source... je pourrais t'expliquer tout ca en détail mais en PV si tu le souhaites ! J'aime bien aider les autres ! J'avoue que les prog de communication en réseaux, c'est un domaine que j'adore expliquer à ceux qui y débute :)
Message-moi !
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007
-
<<Maintenant, j'aimerais savoir dans quelle autre situation ta classe est utile, quelle est l'utilité de se passer un fichier à soi même>>

lol, je recite ça juste pour t'expliquer pourquoi je vais faire le nécessaire pour faire enlever les premiers commentaires que nous avons rédigé d'ici quelques jours (celui ci compris)...
Tu comprends, tu es à l'ouest là... la class n'envoie pas un fichier à soi-même, elle gère l'envoie et la réception de fichier, de n'importe qui à n'importe qui... tu as vraiment trop mal interprêté le code source, et les commentaires préjudiciable au contenu d'une source sont malvenus, surtout pour l'auteur de la source ! C'est pas cool :(

;)

T'en fais pas je t'en veux pas du tout, je suis même tout à fait disposé à te filer des coups de main lorsque tu auras des problèmes avec winsock... :-)

@+
Celiphane

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.