URL: https://linuxfr.org/users/cho7kipu/journaux/broadcast-en-c Title: Broadcast en C Authors: cho7 Date: 2004年03月21日T18:50:26+01:00 Tags: Score: 0 Coucou c'est re-mouaaaaaa ! Bon, cette fois je fournis mon code source du serveur complet, pour que les puristes puissent faire "arrrghhhh", et que les autres puissent m'aider :-) Alors déjà si quelqu'un a compris ce que je veux faire a la seule vue du code bravo ! Pour les autres, je tente une pseudo technique crado, pour tenter d'imiter une sorte de wall. Le serveur ecoute sur un port, quand quelqu'un se pointe, il accepte la connexion. problème, j'arrive pas a le faire accepter sur un autre port que celui sur lequel il ecoute ! :-( Résultat dès qu'un client se connecte, le serveur n'ecoute plus... Si quelqu'un peut m'aider en pointant l'os dans le paté, ou meme en me corrigant 2-3 lignes de codes (pas tout hein, yaurai trop a faire pour que ce soit propre...puis jlaime bien mon style crados de pseudo codeur en herbe) Bref, merci d'avance. P.S : oui je sais, le code est pourri, mal codé, et c'est débile de vouloir faire ca, mais si vous voulez pas m'aider, me criez pas dessus hein, allez donc lire un autre journal, yen a plein - cho7, celui qui se fait souvent crié dessus, car il poste des journaux sans interet aucun, et qu'en plus il a pseudo totalement con - #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #define MAX_CONNECT 50 #define PORT 1983 int main(int argc, char * argv[]) { int i; int nb_connect=0; /* nombre de connexions en cours*/ int fds,nb_octets; int fdc[MAX_CONNECT]; /* table contenant tous les file descriptor des clients */ int sin_size; struct sockaddr_in serveur; /* les sockets */ struct sockaddr_in client[MAX_CONNECT]; char message[256]; /* on y stock les datas émisent par les différents clients */ /* on ouvre un socket */ if ((fds=socket(AF_INET,SOCK_STREAM,0))==-1) { printf("Erreur, le socket serveur n'a pu etre créé !\n"); exit(1); } /* on initialise tout */ serveur.sin_family=AF_INET; serveur.sin_port=htons(PORT); serveur.sin_addr.s_addr=INADDR_ANY; memset(&(serveur.sin_zero),'0円',8); /* on bind le socket */ if (bind(fds,(struct sockaddr *)&serveur,sizeof(struct sockaddr)) == -1) { printf("Erreur, le bind n'a serveur n'a pu etre effectué !\n"); exit(1); } if (listen(fds,5) == -1) { printf("Erreur, la fonction listen coince !"); exit(1); } /* démarrage de la boucle evenementielle infinie */ while(1) { sin_size = sizeof(struct sockaddr_in); if ((fdc[nb_connect]=accept(fds,(struct sockaddr *)&client[nb_connect],&sin_size)) == -1) { continue; } else { nb_connect++; /* hop, un client de plus */ } for (i=0;i<nb_connect;i++) { /* on récupere pour chaque file descriptor les données qui veulent entrer sur le serveur */ if ((nb_octets=recv(fdc[i],message,256,0)) == -1) { message[nb_octets]='0円'; printf("%s\n",message); } } for (i=0;i<nb_connect;i++) { /* on ferme tous les sockets client */ close(fdc[i]); } close(fds); } return 0; }