Bonjour a tous,
Je suis entrain de développer un serveur en C++ sous Linux. C'est un mini chat dans lequel les utilisateurs se connectent et échangent des messages. J'ai fini l'interface client et il me reste des petits problèmes avec l'interface serveur. J'ai réussi a faire échanger les messages entre le serveur et les clients mais pas les clients avec les clients. En effet, dans mon projet j'utilise la fonction Fork pour qu'elle se charge de traitement des demandes des clients et j'utilse les messages queues pour la communication inter processus. Je sais que je suis entrain de rendre ma tache difficile et que je peux travailler avec les threads au lieu des fork() mais je suis vraiment obligé d'utiliser juste les fork puisque c'est le projet qui me l'impose. Bref, mon probleme est comme suit : Si j'envoie un message au serveur , le serveur doit le renvoyer a tous clients . Je pensais a mettre toutes les connexions dans un tableau puis utiliser le Sendto() pour envoyer les messages a tous les clients. Mais la, mon descripteur de fichier retourné par la fonction accept est le même pour tous les clients et j'arrive pas a résoudre ce problème pourtant j'ai utilisé deux ordinateur avec deux IP diffèrent et le id socket est toujours le même. Résumant tous ca en code :
J'espère que je trouverai quelqu'un qui peut m'aider a résoudre ce problème!
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 int main(void) { memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT_NUM); server_addr.sin_addr.s_addr = htonl(INADDR_ANY); // Mon socket server_s = socket(AF_INET, SOCK_STREAM, 0); // On fait un bind bind(server_s, (struct sockaddr *)&server_addr, sizeof(server_addr)); // On ecoute listen(server_s, MAX_LISTEN); addr_len = sizeof(client_addr) ; while (1 ) { client_s = accept(server_s, (struct sockaddr *)&client_addr,&addr_len); // client_s prend tout le temps la valeur 4 et cette valeur est la meme pour tous les clients qui se connectent sur le serveur server_process = fork() ; if(server_process == 0 ) { close(server_s) ; cout << " Mon socket id : " << client_s<<endl ; unsigned int client_id = client_s ; // On traite les requetes du client commnunicate(client_id) ; cout<<"sortir"<<endl; exit(0) ; } else cout << "je suis le pere" <<endl ; close(client_s); } close(server_s); return (0); }
J'ai perdu beaucoup de ton sur ca!!
Je vous remercie beaucoup,
CV !
PS : Je serai sur le chat toute la soirée!
Partager