bonsoir bonsoir
Voila j ai un probleme de lecture d un socket.Je vais expliquer le principe de mon programme meme si je sais que la m aider va etre difficile
-J ai un serveur qui attend la commande d un client
-une fois que le client envoie la commande le serveur verifie son existence dans une liste qu il a chargé.
-si la commande n existe pas il envoie un signal au client pour qu il affiche que la commande n existe pas.
-si elle existe il envoie au client la position de la commande dans la liste pour effectuer l operation correspondante.
La saisi et l envoie de la commande par le client marche bien.
Si le client envoie une commande fausse le serveur est capable de lui envoyer le signal qui indique que la commande n existe pas.
la ou ça pose probleme c est quand la commande existe.
le client n arrive pas à lire la position de la commande .J utilise un read.
Je ne peux pas mettre le code entier tout est separé dans des fichier differents mais je vais mettre la partie qui bloque au cas ou
client.c
serveur.c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 int rw; int boucle=0; char comand[10]; char message[1024]; char buf[1]; int rcom; while(boucle==0) { printf("client>"); scanf("%s",&comand); printf("%s\n",comand); rw=write(sockfd,comand,10); if(rw==-1)printf("erreur ecriture\n"); bzero(&comand,0); lg=read(sockfd,message,1024); if(lg==-1)printf("erreur\n"); rcom=strcmp(message,"fault"); bzero(&message,0); if (rcom==0) { printf("la commande n existe pas \n"); } else { printf("on rentre dans else\n"); bzero(&buf,0); printf("pn va lire"); lg=read(sockfd , buf , 1); //le programme s arrete ici il ne lit pas et ne me signale pas d erreur if(lg==-1)printf("erreur\n"); printf("%d\n",lg); printf("on a lu\n"); printf("%s\n" , buf); //bufconv=strtol(buf ,NULL ,10); //printf("%d\n" , bufconv); //switch(bufconv) } } close(sockfd); }
alors je n ai pas fini le programme puisque qu il n y a pas la sortie de boucle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
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
36
37
38
39
40
41
42
43
44 char comand[10]; char buf[1]; char message[1024]; int boucle=0; int res; int rw; pile *com; while(boucle==0) { printf("on rentre dans la boucle\n"); lg=read(sock_com,comand,10); if (lg==-1)printf("erreur lecture\n"); res=recherche(com,comand); if (res==0) { strcpy(message,"fault"); write(sock_com,message,1024); } else { printf("on rentre else\n"); printf("%d\n",res); bzero(&buf,0); sprintf (buf "%d",res ); printf("%s\n",char); rw=write(sock_com,buf,1); if (rw==-1) { printf("erreur ecriture\n"); } printf("on à ecrit\n"); } } close(sock); }
Le probleme se situe au niveau du client avec le dernier read.La le client ne fait plus rien et n affiche pas ce qu il y a en dessous
Partager