Socket sous linux

Résolu/Fermé
nilly Messages postés 154 Date d'inscription samedi 26 janvier 2008 Statut Membre Dernière intervention 25 octobre 2012 - 6 févr. 2009 à 21:39
nilly Messages postés 154 Date d'inscription samedi 26 janvier 2008 Statut Membre Dernière intervention 25 octobre 2012 - 7 févr. 2009 à 15:16
Bonjour,
j'ai écrit deux programmes en langage C sous linux un serveur.c et un client.c et il faut effectué une communication entre ces deux programmes via les sockets, les programmes échangent des chaines de caractères.
mes programmes marchent parfaitement ( je fait entrée les messages échanges entre le serveur et le client par un scanf) et l'échange aussi est correct quand je fais entrée un simple mot.
le problème c'est que quand je tape une phrase entière c'est seulement le premier mot qui est pris en considération
c-à-d la lecture du message se termine si un espacement est rencontré.
je comprend pas pourquoi
quelqu'un peut m'aidai s.v.p??
et merci
A voir également:

5 réponses

N'ayant pas ton code, je ne puis que supputer une hypothèse, à savoir:
- si l'échange se fait entre les deux machines, il n'y a, à priori pas de raison qu'un nombre quelconque de caractères ne soit pas transmis. Pour moi, l'erreur proviendrait du scanf qui considère l'espace comme un séparateur.
Personnellement je ne l'utilise quasiment jamais car je n'ai jamais vraiment bien compris comment l'utiliser.
Si tu penses que l'erreur vient de là et que tu veuilles absolument l'utiliser, je te souhaite de croiser le chemin de fiddy qui est un spécialiste, entre autre, de la saisie clavier.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
7 févr. 2009 à 12:38
Salut,
Oui, scanf s'arrête au premier espace rencontré.
Si tu veux utiliser scanf ! utilise plutôt :
char buffer[250]; scanf("%249[^\n]",buffer);

Ou, plus simplement fgets, :
char buffer[250]; fgets(buffer,sizeof buffer,stdin);

Cdlt
0
nilly Messages postés 154 Date d'inscription samedi 26 janvier 2008 Statut Membre Dernière intervention 25 octobre 2012 5
7 févr. 2009 à 12:58
salut
merci fiddy ça marche mais il' y a un autre problème
voici un exemple d'exécution
serveur : client :
$./serveur $./client
attente d'une communication communication etablie
communication etablie entrez votre message :
le client à envoyer : aa bb aa bb
rependre au client :
gg ff le serveur a envoyer :
Erreur de sefmentation (core dumped)

et ça s'arrete là.
?????
0
nilly Messages postés 154 Date d'inscription samedi 26 janvier 2008 Statut Membre Dernière intervention 25 octobre 2012 5
7 févr. 2009 à 13:03
dsl c'est pas assez claire là haut
voilà
terminale serveur :
serveur :
$./serveur
attente d'une communication
communication etablie
le client à envoyer : aa bb
rependre au client :
gg ff
Erreur de segmentation (core dumped)

terminale client :
client :
$./client
communication etablie
entrez votre message :
aa bb

le serveur a envoyer :

et ça s'arréte là
j'ai pas le temps pour saisir un message au client par le serveur
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nilly Messages postés 154 Date d'inscription samedi 26 janvier 2008 Statut Membre Dernière intervention 25 octobre 2012 5
7 févr. 2009 à 15:16
ça y est ça marche merci
j'ai utilisé fgets et malloc pour reservé un espace pour les messages envoyer
0