IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Client serveur C


Sujet :

Linux

  1. #1
    Membre habitué Avatar de chercheur111
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 352
    Points : 163
    Points
    163
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    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.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre habitué Avatar de chercheur111
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 352
    Points : 163
    Points
    163
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. Web contre client/serveur que choisir??
    Par silvermoon dans le forum Débats sur le développement - Le Best Of
    Réponses: 41
    Dernier message: 24/01/2004, 15h53
  2. Quel outil pour du développement Client/Serveur (Win XP) ?
    Par jey_bonnet dans le forum Débats sur le développement - Le Best Of
    Réponses: 5
    Dernier message: 02/11/2002, 14h57
  3. Réponses: 2
    Dernier message: 01/10/2002, 12h25
  4. comment gerer plusieurs connexions client/serveur
    Par naili dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/08/2002, 16h58
  5. Langage le mieux adapté pour application client serveur ?
    Par guenus dans le forum Débats sur le développement - Le Best Of
    Réponses: 4
    Dernier message: 17/06/2002, 15h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo