Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TRANSFERT DE FICHIERS VIA WINSOCK-CA MARCHE A 100%.


Information sur la source

Catégorie :Réseau & Internet Niveau : Initié Date de création : 03/04/2005 Date de mise à jour : 04/04/2005 15:42:10 Vu / téléchargé: 5 100 / 1 371

Note :
5,5 / 10 - par 4 personnes
5,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

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

  • 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
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!
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

04 avril 2005 15:42:10 :
Ajout des applications, Client & Server.

Commentaires et avis

signaler à un administrateur
Commentaire de NICK123 le 04/04/2005 11:13:17

hi sonic,
pourquoi pas partager votre sources avec tous le monde , votre E-mail ne sert à rien.

ici nos sources sont partagées.

si mieux de mettre au titre A VENDRE.

lol.

signaler à un administrateur
Commentaire de lektrosonic le 04/04/2005 15:47:25

Voila j'ai rajoute les sources des deux applications.

signaler à un administrateur
Commentaire de NICK123 le 04/04/2005 16:29:57

MERCI
:-)

signaler à un administrateur
Commentaire de meedo le 04/04/2005 20:33:37

slt lektrosonic
merci pour le rajout de ta source
c vraiment genial
a la prochaine

signaler à un administrateur
Commentaire de Pingouin le 04/04/2005 20:36:42

A mon avis ce qui poser probleme d'habitude ce n'est pas vraiment l'envoi du fichier en lui m^m parce que ouvrir un fichier, le lire et passer le bloc lu en paramètre de senddata ca ca va encore, de meme pour la réception : écrire un fichier bon ... Ce qui est plus diffcile c'est le code réseau en lui même , établir la connexion et s'assurer qu'elle est bonne, transmettre le fichier, et le mieux est encore de s'assurer que le transfert n'a pas altéré le fichier (c'est ce que je m'attendais a trouver).
Je suis donc déçu, en effet ton code est adaptable, mais bon la lecture/écriture des fichiers n'intéressent que moyennement les gens qui développent des appli réseaux...(a mon humble avis)
@+

Pingouin

signaler à un administrateur
Commentaire de lektrosonic le 04/04/2005 21:25:48

Alors d'apres toi, queske je doi ameliorer?

signaler à un administrateur
Commentaire de e_NeX le 04/04/2005 23:17:22

salut, ca a l'air bien ton bout de code mais 2 problemes majeurs, meme critiques:

1_ Chaques fois que ton winsock recois des données, il réinitialise ( il me semble que ce mot est approprié mais corrigez moi si je m'exprime mal) les variables Temp,data, et blocksize

2_ ton bout de code utilise 100% de CPU!

voici ce que je viens de ramarquer. je vais donc essayer de remedier au 2eme probleme mais je ne promet rien!
sinon bonne continuation!

signaler à un administrateur
Commentaire de ennixo le 05/04/2005 07:01:59

il est important de souligner que le DoEvents pour séparer les données du fichier et la fin du transfert "end" ça fonctionne en local (soit sur son propre pc soit dans un réseau local) mais à "grande" distance, en WAN (sur le net quoi), avec tous les aléas et les ralentissements et collisions divers qu'il peut y avoir il est possible qu'à la fin le "end" n'arrive pas seul mais collé au paquet qui le précède.
celà empecherait de savoir que c'est la fin et dans le cas d'un enchainement de plusieurs transferts de fichiers ça provoquerait une erreur.

mon conseil : un grand nombre de solutions peuvent palier à ce problème, en voici 2 :
la premiere : fermer la connexion coté senddata au lieu d'envoyer "end". le défaut c'est qu'en cas de coupure de la connexion on ne pourra pas vérifier si le fichier a bien été reçu ou pas.
la seconde : envoyer une commande avant l'envoi qui indique la taille du fichier (et pourquoi pas le nom du fichier). ainsi en comparant la taille du fichier reçu avec la taille envoyée on saura tout de suite si le fichier a bien été reçu =)

voilà en espérant que ça serve...

signaler à un administrateur
Commentaire de Pingouin le 05/04/2005 20:09:50

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

signaler à un administrateur
Commentaire de pico160 le 07/05/2005 09:24:24

c'est tres bon  !!!
vous etes genie!!!
bon courage !!
*****fadhel *******

signaler à un administrateur
Commentaire de moimadmax le 05/12/2006 16:51:41

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.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,172 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.