Hello world !
Je galère sur les sockets e C, mais plus pour très longtemps. J'ai quand même besoin de vos lumières pour un problème d'envoi de messages en TCP :
D'un côté j'envoie une série de messages dans une boucle, et de l'autre, toujours dans une boucle, je les reçois. Sur l'essai que j'effectue, il y a 3 messages successifs, les deux premiers ayant la même taille, le dernier étant plus petit.
L'émission des messages semble bien se passer, par contre à la réception c'est pas ça : Le premier message arrive parfaitement, mais la deuxième réception est plus grand de 37 octets que le premier, et contient d'ailleurs les 37 premiers octets de troisième message... Et le 3e message arrive tronqué puisqu'il manque les 37 premiers octets du message !
Voici le code de l'envoi de message :
Et le code de la réception (extrait du contexte, faites pas attention au while(1)) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 char msg[520+1]; sprintf(msg, "%s:%d:%d:%s", fic->nom, fic->taille, num, buffer); msg[n] = '\0'; if(send(socktcp, msg, strlen(msg), 0) == -1) { perror("Erreur lors de l'appel a send -> "); exit(3); } bzero(msg, strlen(msg));
Je ne pense pas que ça soit une question de '\0' à la fin car j'ai essayé avec et sans à l'émission et à la réception et ça ne semble pas changer grand chose... J'ai aussi essayé d'utiliser des bzero sans succès...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 while(1) { char buffer[520+1]; // pb ici !? int length; bzero(buffer,520+1); if((length = recv(socktcp2, buffer, sizeof(buffer), 0)) >= 0) { printf("message TCP recu (%d) : %s\n", length, buffer); /* traitement */ } }
Qu'en pensez-vous ?
Partager