Bonjour j'aimerais savoir qu'est ce qui cloche dans mon code svp;Je code un convertisseur de devise;J'ai l'impression qu'il n'y a pas d’interaction entre le serveur et le client.
Lors de l'exécution le programme rentre que dans la partie précédent le printf("1")ligne 45; au niveau du client;et dans le serveur cela affiche seulement le printf("serveur"); ligne 40.
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 #include<stdio.h> #include<stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include<fcntl.h> #include<signal.h> int main(int argc,char **argv) { int tube; char requete[30]={" "}; char nom_tube[30]={" "}; char deviseA[30]={" "}; // A->B char deviseB[30]={" "}; char reponse[30]={" "}; char montant[30]={" "}; int i; FILE *f; if(argc<2 || argc>2) { printf("********devise**********\n"); printf("euro:EUR\tdollard:USD\tlivre britannique:GBP\n"); printf("ex: %s \"15 EUR GBP\" \n",argv[0]); exit(-1); } sscanf(argv[1],"%s %s %s",montant,deviseA,deviseB); printf("\n\nrecuperer\n"); printf("montant:%f\ndeviseA:%s\ndeviseB:%s\n\n",atof(montant),deviseA,deviseB); snprintf(nom_tube,30,"rep%d",getpid()); //printf("c:nom_tube:%s,taille:%d\n",nom_tube,strlen(nom_tube)); snprintf(requete,30,"%s %s %s %s\0",montant,deviseA,deviseB,nom_tube); printf("c:requete:%s,taille:%d\n\n",requete,strlen(requete)); int err=mkfifo(nom_tube,0666); printf("1\n"); //envoie de la requete dans le tube du serveur f=fopen(nom_tube,"w"); printf("2\n"); if(f==NULL) { printf("tube non ouvert 1 \n"); exit(0); } printf("3\n"); fprintf(f,"%s",requete); printf("4\n"); fclose(f); sleep(10); f=fopen(nom_tube,"r"); if(f==NULL) { printf("tube non ouvert 2 \n"); exit(0); } fscanf(f,"%s",reponse); fclose(f); remove(nom_tube); printf("resultat:%f\n",atof(reponse)); return 1; }
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> #define n 3 #include<signal.h> void quefaire(int sig) { if(sig==SIGINT){ printf("fin\n"); remove(nom_tube); exit(1); } } int main(int argc,char **argv) { int tube; char requete[30]={" "}; char nom_tube[30]={" "}; char deviseA[30]={" "}; // A->B char deviseB[30]={" "}; char reponse[30]={" "}; char montant[30]={" "}; //float taux=1.34; float taux[n][n]={1.0,1.31072,0.85460, 0.76301,1.0,0.6527, 1.17010,1.53346,1.0}; int i=-1,j=-1; FILE *Fserveur,*Fclient; int err=mkfifo(nom_tube,0666); while(1){ signal(SIGINT,quefaire); printf("serveur\n\n"); Fserveur=fopen(nom_tube,"r"); if(Fserveur==NULL) { printf("tube client non ouvert\n"); exit(0); } fscanf(Fserveur,"%s",requete); fclose(Fserveur); printf("s:lecture conv ok\n"); printf("s:requete:%s\n",requete); sscanf(requete,"%s %s %s %s",montant,deviseA,deviseB,nom_tube); if(fork()==0){ if(strcmp(deviseA,"EUR")==0){i=0;} if(strcmp(deviseA,"USD")==0){i=1;} if(strcmp(deviseA,"GBP")==0){i=2;} if(strcmp(deviseB,"EUR")==0){j=0;} if(strcmp(deviseB,"USD")==0){j=1;} if(strcmp(deviseB,"GBP")==0){j=2;} printf("montant:%s\ndeviseA:%s\ndeviseB:%s\nnom_tube:%s\n", montant,deviseA,deviseB,nom_tube); sprintf(reponse,"%f",atof(montant)/taux[i][j]); //ecriture du resultat dans le tube client Fclient=fopen(nom_tube,"w"); fprintf(Fclient,"%s",reponse); fclose(Fclient); //printf("s:ecriture tube client ok\n\=n"); } waitpid(-1,NULL,WNOHANG/WUNTRACED); } return 1; }
Partager