masseur
Messages postés64Date d'inscriptionsamedi 10 janvier 2004StatutMembreDernière intervention24 avril 2010
-
28 janv. 2005 à 18:53
menjra2000
Messages postés6Date d'inscriptionsamedi 29 mars 2003StatutMembreDernière intervention 6 mars 2006
-
30 avril 2005 à 23:30
Salut.
Je vais vous expliquer mon petit problème.
Je crée un client et un serveur.
Des que le serveur recoit une demande il envoie un fichier en utilisant un thread vers le client.
Seulement quand je teste sur mon PC tout se passe bien.
Dès que je teste les deux programmes sur deux ordis différents du
réseau le client recoit le fichier mais l'image est toute décalée (elle
ressemble plus à rien).
Pourquoi un tel phénomène quand on test sur le réseau et le net?
yoyo269
Messages postés1403Date d'inscriptionlundi 23 février 2004StatutMembreDernière intervention11 janvier 20092 30 janv. 2005 à 09:37
Salut masseur,
je peux te proposer une solution, celle que j'utilise, mais certainement pas la meilleure, car elle rend le débit lent voir très lent (par internet 5 Ko/s).
En fait il faut qu'à chaque fois que tu reçois, tu envoies qq chose au serveur pour lui dire que c'est bon et qu'il peut envoyer à son tour.
Dans le même temps, il faut que ton serveur attende la réponse comme quoi il peut envoyer autre chose, cela revient à envoyer attendre la réponse, envoyer, attendre la réponse et ainsi de suite.
J'espère avoir été clair.
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 30 janv. 2005 à 19:13
Salut,
yoyo269: ben tu n'a rien a faire, une boucle avec des send() qui coté qui emet, et une boucle avec des recv() du coté qui recoit. Il faut aussi tester la valeur de retour de send(): si elle est differente de 0 ou -1 tu peux etre sur que le client a bien recu les données que tu lui as envoyé.
Tout ca est valable pour les sockets bloquants, en utilisant TCP biensur.
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 30 janv. 2005 à 19:20
Salut,
masseur: Tu utilises le protocol TCP, donc tu peux etre sur que les données arriveront dans le meme ordre qu'elles ont été envoyées.
Au lieu de remetre en cause microsoft, remet en cause ton programme:
Tu utilises un buffer de type char pour envoyer un *.bmp, autrement dit un fichier binaire ? c'est pas tres logique.
Quand tu appeles recv, le nombre d'octet recu est la valeur de retour de recv(), ce n'est pas forcement TAILLE_BUF.
Enfin, je décrementerais a chaque iteration la variable taille du nombre d'octet recu, et la condition de la boucle serait: while(taille > 0).
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 30 janv. 2005 à 19:59
Salut,
masseur: je pense que ca vient du fait que tu écris tout le temp TAILLE_BUF octets dans le fichier, alors qu'il est possible que tu en ai recu moins.
Quant a l'envois binaire: un octet n'est pas signé, donc il faut utiliser un buffer de type unsigned char.
yoyo269
Messages postés1403Date d'inscriptionlundi 23 février 2004StatutMembreDernière intervention11 janvier 20092 30 janv. 2005 à 20:55
Je suis sous Dev-C++ et je sais pas comment utiliser les threads avec.
Si l'un de vous le sait, ça serait sympa qu'il partage ses connaissances avec moi.
menjra2000
Messages postés6Date d'inscriptionsamedi 29 mars 2003StatutMembreDernière intervention 6 mars 2006 30 avril 2005 à 23:30
salut,
esk tu peux m envoyer un projet client serveur qui intègre le téléchargement de fichier, authentification (Ex : P2P, KAZAA) , en C sous unix , le plus vite possible