• [^] # Re: Broadcast en C

    Posté par . En réponse au journal Broadcast en C. Évalué à 0.

    J'ai tenté d'integrer ton truc dedans, mais ca coince, le serveur réagit pas : jette donc un oeil


    #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;
    }