Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Sockets] Serveur sur Raspberry Pi

    25 avril 2015 à 10:17:10

    Salut à tous,

    J'essaie en ce moment de faire une connexion client/serveur entre mon PC (serveur) et une Raspberry Pi (client). J'ai trouvé un code en C sur internet que j'ai un peu adapté et j'ai un problème pour lancer la partie serveur. J'utilise les sockets et j'ai toujours la même erreur au moment du binding (c'est l'erreur "Rejet de la requête" ligne 84). J'ai essayé plusieurs ports sans résultat. Des idées ?

    /* Serveur utilisant TCP
    Adapté de http://www.cs.rpi.edu/~moorthy/Courses/os98/Pgms/socket.html
    A compiler avec:
            g++ -o Serveur Serveur.c
            ./Serveur
    Le serveur attend une demande de connexion d'un client.
    Le serveur suppose que le client envoie des entiers positifs, et les renvoie multipliés par 2.
    A la reception de -1, il ferme le socket
    A la reception de -2, il quitte.
    */
    
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <netdb.h>
    #include <string.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <errno.h>
    
    void error(char *msg)
    {
       perror(msg);
       exit(1);
    }
    
    int func(int a)
    {
       return 2*a;
    }
    
    void sendData(int sockfd, int x)
    {
       int n;
    
       char buffer[32];
       sprintf(buffer, "%d\n", x);
       if((n=write(sockfd, buffer, strlen(buffer))) < 0)
            error(const_cast<char*>("Erreur dans l'ecriture vers le socket"));
       buffer[n] = '\0';
    }
    
    int getData(int sockfd)
    {
       char buffer[32];
       int n;
    
       if((n=read(sockfd,buffer,31)) < 0)
            error(const_cast<char*>("Erreur lors de la lecture du socket"));
       buffer[n] = '\0';
       return atoi(buffer);
    }
    
    int main(int argc, char *argv[])
    {
       int sockfd, newsockfd, portno, clilen;
       char buffer[256];
       struct sockaddr_in serv_addr, cli_addr;
       int n;
       int data;
    
       printf("Port:");
       scanf("%d", &portno);
       printf("Utilisation du port #%d\n", portno);
    
       sockfd = socket(AF_INET, SOCK_STREAM, 0);
       if(sockfd < 0)
            error(const_cast<char*>("Erreur lors de l'ouverture du socket"));
       bzero((char *) &serv_addr, sizeof(serv_addr));
    
       serv_addr.sin_family = AF_INET;
       serv_addr.sin_addr.s_addr = INADDR_ANY;
       serv_addr.sin_port = htons(portno);
       if(bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
            listen(sockfd, 5);
       clilen= sizeof(cli_addr);
    
    // Attente d'une connexion
    
       while(1){
            printf("Attente d'un nouveau client...\n");
            if((newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, (socklen_t*) &clilen)) < 0)
                    error(const_cast<char*>("REJET de la requete"));
            printf("Nouvelle communication etablie avec un client\n");
            while(1){
               // Attente d'un nombre de la part du client
               data = getData(newsockfd);
               printf("recu: %d\n", data);
               if(data < 0)
                    break;
    
               data = func(data);
    
               // Envoi du nombre multiplie par 26
               printf("envoi de: %d\n", data);
               sendData(newsockfd, data);
            }
            close(newsockfd);
    
            // Si le client envoie -2, arret de la boucle
            if(data == -2)
                    break;
            }
            return 0;
    }
    



    -
    Edité par oleray 25 avril 2015 à 10:17:37

    • Partager sur Facebook
    • Partager sur Twitter

    [Sockets] Serveur sur Raspberry Pi

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown