int main(int argc, char * argv[])
{
int i;
int ret_val;
int nb_connect=0; /* nombre de connexions en cours*/
int nb_octets;
int fds; /* table contenant tous les file descriptor des clients */
int fdc[MAX_CONNECT];
int sin_size;
struct sockaddr_in serveur; /* les sockets */
struct sockaddr_in client;
fd_set fd;
struct timeval timeout;
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 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);
timeout.tv_sec=1; /* rafraichissement du select = 1 seconde */
if ((fdc[nb_connect]=accept(fds,(struct sockaddr *)&client,&sin_size)) == -1)
{
continue;
}
else
{
printf("Connexion d'un nouveau client (file descriptor : %d) sur le port %d\n",fdc[nb_connect],(int)client.sin_port);
FD_SET(fdc[nb_connect],&fd); /* on ajoute le fd dans le select */
nb_connect++;
if (ret_val>0) /* des données sont arrivées via un des sockets */
{
for (i=0;i<nb_connect;i++)
{
if(FD_ISSET(fdc[i],&fd))
{
/* 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);
[^] # Re: Broadcast en C
Posté par cho7 . En réponse au journal Broadcast en C. Évalué à 0.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/time.h>
#define MAX_CONNECT 50
#define PORT 1983
int main(int argc, char * argv[])
{
int i;
int ret_val;
int nb_connect=0; /* nombre de connexions en cours*/
int nb_octets;
int fds; /* table contenant tous les file descriptor des clients */
int fdc[MAX_CONNECT];
int sin_size;
struct sockaddr_in serveur; /* les sockets */
struct sockaddr_in client;
fd_set fd;
struct timeval timeout;
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 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);
timeout.tv_sec=1; /* rafraichissement du select = 1 seconde */
if ((fdc[nb_connect]=accept(fds,(struct sockaddr *)&client,&sin_size)) == -1)
{
continue;
}
else
{
printf("Connexion d'un nouveau client (file descriptor : %d) sur le port %d\n",fdc[nb_connect],(int)client.sin_port);
FD_SET(fdc[nb_connect],&fd); /* on ajoute le fd dans le select */
nb_connect++;
}
ret_val=select(nb_connect,&fd,NULL,NULL,&timeout);
if (ret_val>0) /* des données sont arrivées via un des sockets */
{
for (i=0;i<nb_connect;i++)
{
if(FD_ISSET(fdc[i],&fd))
{
/* 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);
}
} /* fin du FD_ISSET*/
} /* fin du for*/
}/* fin ret_val */
}
for (i=0;i<nb_connect;i++)
close(fdc[i]);
close(fds);
return 0;
}