Probleme de débutant... - C - Programmation
Marsh Posté le 20-10-2006 à 22:41:49
code serveur:
- ligne 4: inutile
- send_all: c'est quoi le code? (au cas où)
affichage client:
- ligne 4: sizeof(buf)?
- ligne 6: tu est en train d'afficher TOUT le buffer, même si le read précédant n'a pas tout écrit
Marsh Posté le 20-10-2006 à 23:01:54
guiguivts a écrit : je fais une appli client/serveur une sorte de tchat sous console. |
Erreur récurrente. Sans regarder le reste, je dis que tu as oublié de placer un 0 dans ta chaine pour la terminer. Pour ça, aide toi de la valeur retournée par recv(), et n'oublie pas de réserver une place pour le 0 quand tu passes la taille du tableau à recv()... (C'est bien fait au niveau de le réception serveur).
http://mapage.noos.fr/emdel/reseaux.htm
P.S. J'ai finalement lu ton code, c'est bien ce problème. Pour les sockets, plutôt que read()/write() (pas portable du tout), tu devrais utiliser recv()/send(). Au moins, c'est POSIX.1
Marsh Posté le 20-10-2006 à 23:14:00
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.
Marsh Posté le 20-10-2006 à 23:24:28
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 :
|
sauf qu'on doit réserver une place pour le 0 :
Code :
|
client (catastrophe)
Code :
|
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()...
Marsh Posté le 21-10-2006 à 17:41:57
Merci pour les réponses j'ai résolut le probleme
J'ai remplacer tous mes scanf et autres read par
resread=read( entree , buf , 512 );
buf[resread]='\0'
J'ai pas très bien compris pourquoi mais tout fonctionne
Marsh Posté le 22-10-2006 à 11:01:11
Hello
est ce qu'il serait possible que le client affiche ses messages entrant dans un autre terminal que le terminal courant ?
merci
Marsh Posté le 20-10-2006 à 22:00:35
Salut
Petit probleme de programmation en C si quelqu'un pouvait m'aider svp..
je fais une appli client/serveur une sorte de tchat sous console.
voilà le pb
le client n°1 envoie le message " bonjour "
le client n°2 recoit le message " bonjour "
le client n°1 envoie le message " lol "
le client n°2 recoit le massage " loljour "
:L il y a une espece de sauvegarde du premier mot qui met le bazar..
voilà 3 bouts de codes ou le probleme pourrait se situer je pense..
Au niveau du serveur on scan le socket en relation avec le serveur
Ce qu'il y a de bizarre c est que dans le bout de code ci dessus tous les affichages de buf sont corrects mais le client ne reçoit pas la même chose :-( ( et pourtant je ne touche plus au buf apres..)
et le bout de code ou le client écrit son message :
et le bout de code ou le client reçoit le message du serveur
Voilà j'ai fait pas mal de recherche mais ça n'a rien donné..
help me please
Message édité par guiguivts le 20-10-2006 à 22:01:31