Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Discussion: Client serveur C

  1. #1
    Membre habitué Avatar de chercheur111
    Profil pro R. L.
    Étudiant
    Inscrit en
    juillet 2010
    Messages
    339
    Détails du profil
    Informations personnelles :
    Nom : R. L.
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2010
    Messages : 339
    Points : 112
    Points
    112

    Par défaut Client serveur C

    Bonsoir,

    S'il vous plait, je voudrais créer un serveur et un client en C qui communiquent comme suit:
    client ----(hello)---> serveur
    serveur (attend 2 minutes)---(hello)--->client
    client (attend 2 minutes)---(hello)---->serveur
    etc... jusqu'à 15 minutes
    Voici le code du client:

    client.c
    Code C :
    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
    43
    44
    45
    46
    47
     
     
    int main (int argc, char *argv[]) { 
     
    int socketclient,rc; 
    int port, retour;
    struct sockaddr_in localAddr, servAddr; 
    struct hostent *h; 
    char adresseserveurip[32]; 
    char buffer[BUFFER_TAILLE]; 
     
    printf("Entrez l'adresse IP ou le nom du serveur :"); 
    scanf("%s", adresseserveurip); 
    printf(" port :"); 
    scanf("%d", &port); 
     
     
    h = gethostbyname(adresseserveurip); 
    if(h==NULL) { 
    printf("%s: serveur inconnu '%s'\n",argv[0],adresseserveurip); 
    exit(1); 
    } 
     
     
    servAddr.sin_family = h->h_addrtype; 
    memcpy((char *) &servAddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length); 
    servAddr.sin_port = htons(port);
     
     
    socketclient = socket(AF_INET, SOCK_STREAM, 0); 
    if(socketclient<0) { 
    perror("Probleme de creation de socket\n "); 
    exit(1); 
    }
    //Connexion au serveur
    rc = connect(socketclient, (struct sockaddr *) &servAddr, sizeof(servAddr)); 
    if(rc < 0)
    { 
    printf("Probleme de connexion\n"); 
    exit(1); 
    }
    retour = read (socketclient, buffer, 32);
    buffer[32] = '\0';
    printf("\nMessage :%s. Nombre de caracteres lus = %d\n", buffer, retour);
    close (socketclient); 
    return 0; 
    }
    Voici le code du serveur:
    Code C :
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    int creer_socket_serveur(int port)
     
     
     
    {
    int listen_fd;
    struct sockaddr_in sin;
     
     
    if ((listen_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) exit(1);
     
     
    sin.sin_family = AF_INET;
    sin.sin_port = htons(port);
    sin.sin_addr.s_addr = INADDR_ANY;
     
     
    if (bind(listen_fd, (struct sockaddr *)&sin, sizeof (sin)) == -1) exit(1);
     
     
    listen(listen_fd, 5);
     
    return (listen_fd);
    }
     
     
     
    main (int argc, char *argv[])
    {
    int port, so, client_sin_len, nb, socketserveur;
    struct sockaddr_in client_sin;
    char buffer[BUFFER_TAILLE]="Ceci est un exemple de socket!!!";
     
    port=1111;
     
    socketserveur = creer_socket_serveur(port); //Creation du serveur et socket
    printf("Serveur pret ... En attente de requetes ...\n");
     
    client_sin_len = sizeof (client_sin);
    so = accept(socketserveur, (struct sockaddr *)&client_sin, &client_sin_len);
    if (so == -1)
    {
    printf ("Probleme de creation d'une socket de traitement\n");
    exit (1);
    }
     
    nb = write(so, buffer, sizeof (buffer));
    printf("Transmission effectuee. Nombre de caracteres transmis = %d\n", nb);
    close (so);
    close(socketserveur);	
    exit (0);
    }

    S'il vous plaît, où pourrais-je modifier dans le code pour que ça fonctionne?

    Merci.
    La science ne connaît qu'une loi: la contribution scientifique.

  2. #2
    Modérateur
    Avatar de gangsoleil
    Profil pro
    R&D en systemes informatiques bas niveau Unix/Linux
    Inscrit en
    mai 2004
    Messages
    8 536
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : R&D en systemes informatiques bas niveau Unix/Linux

    Informations forums :
    Inscription : mai 2004
    Messages : 8 536
    Points : 21 797
    Points
    21 797

    Par défaut

    Bonjour,

    Toutes les reponses sont dans ce guide : http://beej.us/guide/bgnet/

    Il y a des traductions dans pas mal de langues, dont le francais.
    Modérateur "C", "Informatique Générale & Hardware" et "Unix"
    Les règles du forum

  3. #3
    Membre habitué Avatar de chercheur111
    Profil pro R. L.
    Étudiant
    Inscrit en
    juillet 2010
    Messages
    339
    Détails du profil
    Informations personnelles :
    Nom : R. L.
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2010
    Messages : 339
    Points : 112
    Points
    112

    Par défaut

    Merci pour votre réponse
    Ce que j'ai compris que je dois ajouter une boucle while pour le client autour de ce code ??
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //Connexion au serveur
    rc = connect(socketclient, (struct sockaddr *) &servAddr, sizeof(servAddr)); 
    if(rc < 0)
    { 
    printf("Probleme de connexion\n"); 
    exit(1); 
    }
    retour = read (socketclient, buffer, 32);
    buffer[32] = '\0';
    printf("\nMessage :%s. Nombre de caracteres lus = %d\n", buffer, retour);
    close (socketclient);
    Merci pour votre aide
    La science ne connaît qu'une loi: la contribution scientifique.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •