Transfert de fichiers via winsock-ca marche a 100%.

Soyez le premier à donner votre avis sur cette source.

Vue 7 378 fois - Téléchargée 1 736 fois

Description

Voici encore un code qui permet d'envoyer des fichiers via Winsock. Il se differencit des autres parceque il est sous forme d une fonction, et donc qui peut etre adapte a n'importe quel code.

Source / Exemple :


Dim CheckFileAva As Boolean

Public Sub Senddata(FileName As String, WinsockName As Winsock)
Dim temp As String
Dim BlockSize As Long
Open FileName For Binary Access Read As #1
BlockSize = 4096
Do While Not EOF(1)
temp = Space$(BlockSize)
Get 1, , temp
WinsockName.Senddata temp
DoEvents
Loop
WinsockName.Senddata "end"
Close #1
End Sub

Public Sub Receivedata(WinsockName As Winsock, FileNametoSave As String)
Dim temp As String
Dim data As String
WinsockName.GetData data
If CheckFileAva = False Then
Open FileNametoSave For Binary Access Write As #2
CheckFileAva = True
ElseIf CheckFileAva = True Then
DoEvents
End If
temp = data
If temp = "end" Then
Close #2
CheckFileAva = False
MsgBox "Transfer Success"
Else
Put 2, , temp
End If
End Sub

Conclusion :


Voici les deux fonctions pour le trasnfert de fichiers via Winsock. Dans le .zip, il y a les deux applications Client et Server. Le Client envoie n'importe quel fichier au Server avec succes. Le transfert des fichiers est construit a base de ces deux fonctions contenues dans le module "File Transfert" du .zip. (Le Client envoi seulement, donc il utilise que la fonction d'envoi, et inversement pour le Server). Il reste juste a regler l'envoi du nom du fichier + son extension. En cas de questions, mon mail: greeksonic@hotmail.com
I Ellada pire to Euro malakes!

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
130
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
28 janvier 2013

trés sympa les procédure, mais j'aime pas trop le doevents, et 4096 en buffer c'est faible !

Je viens juste de terminé une fonction à mon logiciel (transfert des fichiers entre Compiègne et Orléans) avec winsock vb6 bien sure, et j’ai une vitesse d’environ 50k, mais tout le monde à normalement cette vitesse, d’ailleurs je ne vois vraiment pas comment faire autrement, les meilleurs monte à 100/120k, mais l’upload de Mr tout le monde c’est 50k !
d’ailleurs installer teamviewer (gros logiciel commerciale, et transférez un fichier «.rar » asse gros(car déjà compressé) et vous devriez transférer à la même vitesse. En tout cas moi je transfert 200k compressé en 4 secondes donc 50k avec Winsock ou teamviewer ! ! !
donc si teamviewer ne peut pas faire mieux ??? Je pense que mon logiciel est au maximum !

PS : au faite pour envoyer des données rapidement j’ai essayé une multitude de combinaison et procédure de dizaine de page codé pour finir simplement quelque ligne dans mon moteur principale Winsock l’on peut envoyer maxi 64k et le receveur maxi 64k, et vous pouvez donc utiliser le tempon maxi car celui qui envoie va moins vite que celui qui récupère
hi,hi,hi !
Après moi je me heurtais à un problème la peur de la perte de données, mais depuis deux jours cela marche très bien, dans le doute j’ai laissé à 30k, et pis les integer compte jusqu’à 32000 ! En faite comme beaucoup j’utiliser doevent, ou un timer à 10ms,…ETC. car lorsque l’on envoyait par exemple 1024 octets+1024 octets on risquait de recevoir 2048 au lieu de 1024, ou alors j’envoyais 8000 et je recevais 4068 !?! Donc pour protéger ce problème certains donner l’exemple de mettre un caractère spécial à la fin du STRING ! Mais en faite la SOLUTION était bien plus simple ! ! ! Un string réellement même à l’intérieur de VB6 c’est quoi : une mémoire à une position fixe, un nom, et une taille, et oui une taille !
La soluce pour envoyé une donnée de 1 à 64000 octets, du text, des images, du son, ou des bloque de fichier c’est de faire data$=vos données
Winsock.SendData string_to_integer(len(data$))+data$ ! ! ! !
(string_to_integer et une function qui transforme un integer en string de deux octets)
Les deux 1er octets, vous êtes obliger de les recevoir, après à vous de regrouper les morceaux avec Getdata de 1000,4000,6000, ou 8000 octets jusqu’à recevoir votre taille définie en amont

Que de temps perdue pour une solution si simple,… je suis comptant d’avoir réussie, mais je suis pas fier de moi, j’ai honte c’était plus facile ! Maintenant je vais pouvoir m’amuser réellement.

PS2 : désolé de ne pouvoir vous donner mon log, il est un peu intransportable, mais pense simple, et tout ira bien, c’est plus simple que les API !
Messages postés
22
Date d'inscription
dimanche 28 décembre 2008
Statut
Membre
Dernière intervention
6 décembre 2009

bonjour peut etre pourais vous m'aider
j'ai fais une appli pour commander une carte relais, maintenant je voudrais la commander d'un autre pc donc je pensais integré un serveur a l'aplication de la carte et faire un client pour l'autre pc mais je ne sais pas si c'est la bonne solution et comment mi prendre (debutant en vb encore plus en reseaux ) merci pour l'aide
Messages postés
18
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
27 novembre 2008

J'ai testé ton code et ca ne fonctionne pas vraiment, car en fait il envoie un multiple de 4096 octets, car dans le dernier paquet meme si il reste 2 octets il en envoie 4096. Donc les fichiers ne font pas la meme taille. pour certains type de fichier ou la taille est dans l'entete (wav par ex) ca peut etre genant.
Messages postés
3
Date d'inscription
dimanche 31 octobre 2004
Statut
Membre
Dernière intervention
7 mai 2005

c'est tres bon !!!
vous etes genie!!!
bon courage !!
*****fadhel *******
Messages postés
262
Date d'inscription
lundi 26 août 2002
Statut
Membre
Dernière intervention
24 août 2005

Déjà rajouter tout ca ce ne serait pas mal. Maintenant le top a mon avis et pour pouvoir mériter le titre de ta source :Þ ce serait de pouvoir vérifier l'intégrité de chaque paquet...La je te souhaite bien du plaisir...Une meilleure gestion de l'écriture dans le fichier (a l'octet en fait) permettrait par exemple au récepteur de redemander un paquet mal transmis ou jms recu...
Voila si tu as du courage pour améliorer tout ca...
@+

Pingouin
Afficher les 13 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.