Bonjour,
Je suis en train d developper une petite application permettant a un client de se connecter a un serveur puis de recuperer des fichiers. J'utilise le protocole TCP. Un probleme intervient lorsque j'essaie de transferer des fichiers de plusieur ko.
Le serveur effectue bien l'envoi de tous les octets du fichiers (la somme des retours du send() est égale a la taille du fichier) mais le client reste bloqué sur un recv() car a un moment dans la boucle while, la valeur de retour de recv n'est pas la taille du tampon (256, 128 ou autres) mais une valeur tres faible, generalement 6.
Voila un bout de code montrant comment se fait l'envoi coté serveur et la reception coté client :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Quelques remarques bizarre :
- si je met la taille de mon buffer à une valeur <= 7 là c'est ok meme pour des fichiers plus gros (comme un mp3 de qques MO) mais c'est horriblement long;
- lorsque je teste sur des petits fichiers (sources de mon prog par exemple), ça marche tout le temps meme avec des buffers importants
- Pour un meme fichier faisant planter, le buffer de taille anormalement rempli est toujours de la meme taille (5 ou 6)
Je suis dessus depuis hier et rien a faire : j'etais persuader qu'en tcp il n'y avait pas de perte de donnée :/

 

 
		
		 
        

 
			
			

 
   


 [TCP] Packet non reçu lors d'un transfert de fichier en TCP
 [TCP] Packet non reçu lors d'un transfert de fichier en TCP
				 Répondre avec citation
  Répondre avec citation
Partager