oliversleep
Messages postés58Date d'inscriptionvendredi 21 décembre 2001StatutMembreDernière intervention11 mai 2009
-
7 mai 2009 à 15:46
oliversleep
Messages postés58Date d'inscriptionvendredi 21 décembre 2001StatutMembreDernière intervention11 mai 2009
-
11 mai 2009 à 13:39
Bonjour,
Je bosse actuellement sur l'envoi de données par socket TCP.
Aucun problème pour le transport, mais ce qui me gène est la lenteur du système. Je suis obligé d'envoyé des paquets de 8192 octets, et ça ralentit énormément le tout.
Connaissez-vous une méthode pour passer outre cette taille ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 7 mai 2009 à 16:47
Salut
Lenteur ?
Bizarre.
Echanges sur réseau privé ou Internet ?
Ce qui peut influencer la vitesse :
- Charge du réseau (local ou Internet) ou mauvaise qualité de la connectique (pour le TCP seulement, UDP ne garantissant pas la qualité, il n'y a pas de contrôle)
- Taux de charge mémoire de la machine émetrice ou réceptrice qui n'aurait pas le temps de gérer son buffer d'envoi/réception
Tu limites les paquets à 8192 octets pourquoi, qu'est ce qui t'oblige à couper tes données ?
A mon avis, tu gères peut-être mal la réception, l'émission ne posant jamais de problème
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 7 mai 2009 à 20:06
Salut,
Vérifi le contarire,
Attention que tes données n'arrive pas trop vite dans ton socket cela pourait surcharger le procésseur (un peu comme une grande boucle sans DoEvents)
Ta solution de découpage est bonne.
Pour l'envoi de données par winsock il est préférable de:
Ne pas charger le fichier complet (je suppose que tu tranfert des fichier étant donné que tu as des paquets de 8192) en mémoire pour l'envoyer de suite,
cela ne sert à rien, winsock le découpe en packet de 8192 et appel plusieur fois la procédure DataArrival.
Envoyer un packet au serveur/client, attendre un message de retour du type "OK" puis procéder à l'envoi suivant.
cela confirme la réceprion, assure un suivis pour la reprise du téléchargement en cas de coupure et évite la perte éventuelle de données.
Pour plus d'infos va ds mon profil et regarde ma première source est porté sur le transfert de gros fichier avec Winsock,
c'est une vielle source non mise à jour comportant quelques bugs mais elle fonctionne.
oliversleep
Messages postés58Date d'inscriptionvendredi 21 décembre 2001StatutMembreDernière intervention11 mai 2009 7 mai 2009 à 21:04
merci de vos suggestions,
mais pour un peu plus de détails :
la communication se fait sur un réseau local, entre un pc et une imprimante spéciale.
Aucun retour n'est effectué par l'imprimante, donc je ne peux pas me baser sur un système de question réponse.
J'ai juste une grosse trame à envoyer, mais lorsque l'imprimante reçoit elle est bien bien lente au niveau de l'impression, donc j'essaye d'optimiser tout ça.
(ça ne vient pas de l'imprimante du fait d'autres tests concluant sur la vitesse).
Je pense donc que ça viendrai de l'utilisation de la socket... mais j'arrive pas à cibler le problème, si vous avez d'autres idées.