bonjour
j'essaye de programmer un chat entre un serveur et un ou plusieurs client
voici le code du client
le serveur:
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 #include <stdlib.h> #include <stdio.h> #include <linux/types.h> #include <sys/socket.h> #include <netdb.h> #include <string.h> #define N 10 //void ouverture_client(int sock); int main() { char host[50]; int sock,lon; struct sockaddr_in adsock; struct hostent *hptr; struct servent *sptr; printf("machine ? \n"); scanf("%s",&host); if ((hptr = gethostbyname(host)) == NULL) { perror(">>Pb pour la recup des infos du host"); exit(1); } /*copie car/car des infos de hptr vers adsock*/ bcopy((char *)hptr->h_addr, (char *) &adsock.sin_addr, hptr->h_length); adsock.sin_family = AF_INET; /*ou hptr->h_addrtype; */ adsock.sin_port = htons(5000); if ((sock = socket(AF_INET, SOCK_STREAM, 0))<0) { perror (">>Pb de creation de la socket"); exit(1); } /*tentative de connexion au serveur dont les infos sont dans adsock */ if ((connect(sock,(struct sockaddr_in*)&adsock, sizeof(adsock)))<0) { perror (">>Pb de connexion"); exit(1); } char bufferRecv[50]; char buffer[50]; while(1) { printf("message ?\n"); scanf("%s",&buffer); int i,lon; send(sock, buffer, strlen(buffer),0); if(lon=recv(sock,bufferRecv, strlen(bufferRecv),0)>0) { //fflush(stdout); printf("Serveur > %s\n",bufferRecv); } else printf("erreur\n"); } //} }
je veux que le serveur renvoie tout les message qu'il reçoit a tout les client connectées. Il le fait bien pour le premier message qu'il reçoit mais pas pour les suivant
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 #include <stdlib.h> #include <stdio.h> #include <linux/types.h> #include <sys/socket.h> #include <netdb.h> #include <string.h> #define N 1000 #define MAX 5 int socks[MAX]; int nb_connecte; void ouverture_serveur(int sock); main() { int server; int sock; struct sockaddr_in sinserv; struct sockaddr_in sin; struct hostent *hptr; sinserv.sin_family=AF_INET; sinserv.sin_addr.s_addr=INADDR_ANY; sinserv.sin_port=htons(5000); if ((sock=socket(AF_INET,SOCK_STREAM,0))<0) { perror(">>Probleme de creation du socket"); exit(1); } bind(sock,(struct sockaddr*)&sinserv,sizeof(sinserv)); listen(sock,10); //char buffer[N]; int sinsize; //int err=0; nb_connecte = 0; pthread_t thread_serveur; while(1) { sinsize=sizeof(sin); if((server=accept(sock,(struct sockaddr*)&sin,&sinsize))>=0) {printf("%d\n",server); socks[nb_connecte]=server; nb_connecte++; pthread_create(&thread_serveur, NULL, (void*)&ouverture_serveur,server); } } } void ouverture_serveur(int sock) { int b,tmp; printf("Client Connecté\n" ); char buffer[50]; int i; fflush(stdout); while(1) { for (i=0;i<=50;i++){ buffer[i]= ' '; } if(tmp=recv(sock,buffer,strlen(buffer),0)) { printf("Message reçu d'un client: "); printf("%s\n",buffer); for(b=0;b<nb_connecte;b++) { fflush(stdout); send(socks[b],buffer,strlen(buffer),0); printf("renvoi: %s\n",buffer); } } } }
voila ce que j'ai sur l'ecran:
cote serveur:
et cote client:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 ./serveur 4 Client Connecté Message reçu d'un client: salut renvoi: salut Message reçu d'un client: bonjour renvoi: bonjour
j'arrvie pas a trouver pourquoi il ne renvoie que le premier message qu'il reçoit??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 ./client machine ? I121pc03 message ? salut Serveur > salut message ? bonjour Serveur >
Partager