TRANSFERT DE FICHIERS VIA WINSOCK-CA MARCHE A 100%.
cs_NICK123
Messages postés29Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention22 juin 2009
-
4 avril 2005 à 11:13
rebixav
Messages postés130Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention28 janvier 2013
-
11 sept. 2012 à 22:51
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
rebixav
Messages postés130Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention28 janvier 2013 11 sept. 2012 à 22:51
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 !
PAT9SAB
Messages postés22Date d'inscriptiondimanche 28 décembre 2008StatutMembreDernière intervention 6 décembre 2009 12 oct. 2009 à 18:05
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
moimadmax
Messages postés18Date d'inscriptionmardi 2 septembre 2003StatutMembreDernière intervention27 novembre 2008 5 déc. 2006 à 16:51
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.
pico160
Messages postés3Date d'inscriptiondimanche 31 octobre 2004StatutMembreDernière intervention 7 mai 2005 7 mai 2005 à 09:24
c'est tres bon !!!
vous etes genie!!!
bon courage !!
*****fadhel *******
cs_Pingouin
Messages postés262Date d'inscriptionlundi 26 août 2002StatutMembreDernière intervention24 août 2005 5 avril 2005 à 20:09
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
ennixo
Messages postés224Date d'inscriptionsamedi 25 janvier 2003StatutMembreDernière intervention17 juin 2006 5 avril 2005 à 07:01
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...
e_NeX
Messages postés104Date d'inscriptionmardi 9 mars 2004StatutMembreDernière intervention30 novembre 2009 4 avril 2005 à 23:17
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!
lektrosonic
Messages postés145Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention21 février 2013 4 avril 2005 à 21:25
Alors d'apres toi, queske je doi ameliorer?
cs_Pingouin
Messages postés262Date d'inscriptionlundi 26 août 2002StatutMembreDernière intervention24 août 2005 4 avril 2005 à 20:36
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
cs_meedo
Messages postés3Date d'inscriptionjeudi 6 mars 2003StatutMembreDernière intervention 2 mars 2006 4 avril 2005 à 20:33
slt lektrosonic
merci pour le rajout de ta source
c vraiment genial
a la prochaine
cs_NICK123
Messages postés29Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention22 juin 2009 4 avril 2005 à 16:29
MERCI
:-)
lektrosonic
Messages postés145Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention21 février 2013 4 avril 2005 à 15:47
Voila j'ai rajoute les sources des deux applications.
cs_NICK123
Messages postés29Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention22 juin 2009 4 avril 2005 à 11:13
hi sonic,
pourquoi pas partager votre sources avec tous le monde , votre E-mail ne sert à rien.
11 sept. 2012 à 22:51
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 !
12 oct. 2009 à 18:05
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
5 déc. 2006 à 16:51
7 mai 2005 à 09:24
vous etes genie!!!
bon courage !!
*****fadhel *******
5 avril 2005 à 20:09
Voila si tu as du courage pour améliorer tout ca...
@+
Pingouin
5 avril 2005 à 07:01
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...
4 avril 2005 à 23:17
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!
4 avril 2005 à 21:25
4 avril 2005 à 20:36
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
4 avril 2005 à 20:33
merci pour le rajout de ta source
c vraiment genial
a la prochaine
4 avril 2005 à 16:29
:-)
4 avril 2005 à 15:47
4 avril 2005 à 11:13
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.