bonjour,
j'ai un probleme avec mon application client/serveur pour la reservation des places libres, j'ai fais l'application client(reservation/consultation), mais pour le serveur de consultation, je ne sais pas comment le message recevé peut etre utilisé , j'ai fais printf() pour l'afficher mais il a affiche rien,,

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
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stddef.h>
#include <unistd.h>
 
#define PORTS 5100
 
struct sockaddr_in addr_serveur, addr_client;
int lg,n,retour,sock,i;
char *reponse="message recu du serveur de consulation\n";
char message[100];
 
char consultation()
	{
	i++;
	printf("message traité n %d\n",i);
	printf("message recu N° %d: %s \n ",i,message);
	return 0;
	}
 
int  main(void)
{
	sock=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
	if(sock==-1){	perror("erreur de creation socket");
		exit(1);
	};
/* mise a zero de la mémoire d'adresse. */
 
	bzero(&addr_serveur, sizeof(addr_serveur));
 
/* preparation de la structure adresse*/
 
	addr_serveur.sin_family=AF_INET;
	addr_serveur.sin_port =htons(PORTS); 
	addr_serveur.sin_addr.s_addr=INADDR_ANY; /*b n'import quelle adresse*/
 
	if( bind(sock,(struct sockaddr *)&addr_serveur, sizeof(addr_serveur))<0) 
	{	perror("Erreur d'attachement: appel BIND");
		exit (2);
	};
 
	for(;;) 
	{
		lg=sizeof(addr_client);
		n=recvfrom(sock,message,500-1,0,(struct sockaddr *)&addr_client,&lg);
		printf("le nombre d'octets recus: %i\n",n);
		consultation();
		sendto(sock,reponse,100,0,(struct sockaddr *)&addr_client,lg);
	}
close(sock);
}
pour l'application client:
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
 
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define PORTC 5000
#define PORTS1 5100
#define PORTS2 5200
main(void){
int sock;
struct hostent *h;
struct sockaddr_in sockin;
char evenement[50];
char type;
char placelibre[100];
socklen_t lg;
int n;
	printf("Pour fermer le programme , tapper ctrl+c .\n");
	printf("entrer le identité de l'événement completé par la date: \n EX:spiderman3 12/12/08.\n");
	fgets(evenement,sizeof(evenement),stdin);
 
 
	printf("que vouller vous faire :\n tapper 'R' pour reservation, ou tapper 'C' pour consultation.\n");
	fgets(&type,10,stdin);
 
 
/*consultation*/
 
switch(type)
	{case'C': case'c': {
		/*creation de socket*/
 
		if((sock = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))<0)
		{
		perror("erreur de creation socket");
		exit(1);	
		}
/* mise a zero de la zone memoire d'adresse */
 
		bzero(&sockin, sizeof(sockin));
 
/* preparation de la structure adresse*/
 
		sockin.sin_family=AF_INET;
		sockin.sin_port =htons(PORTC); 
		sockin.sin_addr.s_addr=INADDR_ANY; /*b n'import quelle adresse*/
 
/*attachment socket*/
 
		if( bind(sock,(struct sockaddr *)&sockin, sizeof(sockin))<0) {
			perror("Erreur d'attachement: appel BIND");
			exit (2);
		}
 
		if(!(h=gethostbyname("localhost")))  {
			perror("erreur gethostbyname");
			exit(3);
		}
		bzero(&sockin, sizeof(sockin));
		sockin.sin_family = AF_INET;
		memcpy(&sockin.sin_addr,h->h_addr,h->h_length);
		sockin.sin_port= htons(PORTS1);
 
 
		sendto(sock,evenement,50,0,(struct sockaddr *)&sockin,sizeof(sockin));
		n=recvfrom(sock,placelibre,1000,0,(struct sockaddr *)&sockin, &lg);
 
		if(strncmp(placelibre,"erreur !!",n-1)==0)
		printf("desolé, cette evenement n'existe pas \n");
 
 
		else	{
			printf("message recue est:\n%s\n",placelibre);
		};
		close (sock);
 
	}
	break;
 
/*reservation*/
 
case'R': case 'r':{
 
	/*creation de socket*/
 
	if((sock = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))<0)
		{
		perror("erreur de creation socket");
		exit(1);	
		};
/* mise a zero de la zone memoire d'adresse */
 
	bzero(&sockin, sizeof(sockin));
 
/* preparation de la structure adresse*/
 
	sockin.sin_family=AF_INET;
	sockin.sin_port =htons(PORTC);
	sockin.sin_addr.s_addr=INADDR_ANY; /*b n'import quelle adresse*/
 
/*attachment socket*/
 
	if( bind(sock,(struct sockaddr *)&sockin, sizeof(sockin))<0) {
		perror("Erreur d'attachement: appel BIND");
		exit (2);
		}
 
	if(!(h=gethostbyname("localhost")))  {
		perror("erreur gethostbyname");
		exit(3);
		}
	bzero(&sockin, sizeof(sockin));
	sockin.sin_family = AF_INET;
	memcpy(&sockin.sin_addr,h->h_addr,h->h_length);
	sockin.sin_port= htons(PORTS2);
 
	sendto (sock,evenement,50,0,(struct sockaddr *)&sockin, sizeof(sockin));
	n=recvfrom(sock,placelibre,10,0,(struct sockaddr *)&sockin, &lg);
 
	if(strncmp(placelibre,"erreur !!",n-1)==0)
		printf("desolé, cette evenement n'existe pas \n");
 
	else	{
		if(strncmp(placelibre,"réservation accépté !",n-1)==0)
			printf("désolé, cette événement n'éxiste pas \n");
 
		else
			printf("erreur de reservation inconnue!!\n");
		}
	close (sock);
 
}
break;
default: printf("erreur de frappe, reessayer!! \n");
 
}}
j'ai executer les code , et voila ce que j'ai eu pour le client:
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
 
[xxx@localhost ~]$ ./clien
Pour fermer le programme , tapper ctrl+c .
entrer le identité de l'événement completé par la date:
 EX:spiderman3 12/12/08.
siderman 12/30/12
que vouller vous faire :
 tapper 'R' pour reservation, ou tapper 'C' pour consultation.
C
message recue est:
message recu du serveur de consulation
 
[xxx@localhost ~]$ ./clien
Pour fermer le programme , tapper ctrl+c .
entrer le identité de l'événement completé par la date:
 EX:spiderman3 12/12/08.
the ring 12/12/07
que vouller vous faire :
 tapper 'R' pour reservation, ou tapper 'C' pour consultation.
c
message recue est:
message recu du serveur de consulation
 
[xxx@localhost ~]$

et ca ce que j'ai eu pour le serveur:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
[xxx@localhost ~]$ ./serv
le nombre d'octets recus: 50
message traité n 1
message recu N° 1:
 
 le nombre d'octets recus: 50
message traité n 2
message recu N° 2:

aidez moi SVP!! est ce que j'ai oublier quelque chose????