Emmanuel Delahaye C is a sharp tool | nargy a écrit :
Je ne suis pas sûr que le problème se résume à un \0 manquant... recv, send, read et write n'en tiennent pas compte. En fait il ne faudrait même pas envoyer de 0, qu'il n'est pas recommandé d'écrire avec write sur un terminal, ou alors utiliser printf et des vérifications sur les débordements de buffer.
|
Ben si : Serveur (presque OK)
Code :
- lon=read(soc, buf, sizeof(buf)); // on enregistre ce qu'il y a dans le socket
- buf[lon]='\0'; // on rajoute le caractere de fin de ligne
|
sauf qu'on doit réserver une place pour le 0 :
Code :
- lon=read(soc, buf, sizeof buf -1); // on enregistre ce qu'il y a dans le socket
- buf[lon]='\0'; // on rajoute le caractere de fin de ligne
|
client (catastrophe)
Code :
- read(sd, buf, sizeof(buf)); // on lit ce qu'il y a sur le socket
- write(1,buf,strlen(buf)); // et on l'affiche
|
strlen() sur une chaine invalide, justement parce que le 0 n'est, comme il se doit, pas transmis[1]. (on doit en principe terminer la ligne par un \n)
--------------
[1] enfin, on suppose, vu qu'on a pas le code se send_al()...
---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
|