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

Réseau C Discussion :

question client serveur


Sujet :

Réseau C

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 40
    Points : 12
    Points
    12
    Par défaut question client serveur
    Bon j'ai réaliser un client serveur j'ai mis l'option que lorsque le client est connecter il rentre un pseudo, et j'aimerais que ce pseudo s'afficher aussi dans la fenetre du serveur mais je n'y arrive pas. Je pense qu'il faut envoyer le pseudo au serveur pour que celui ci le retranscrive mais je n'y arrive pas en fesant les send et recv sa ne fonctionne pas.

    Si quelqu'un peut m'aider merci

  2. #2
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    Bien le bonjour,

    Pour que le serveur puisse afficher le pseudo du client connecté, il va en effet falloir que le client envoie son pseudo.

    Montre nous ton code.

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 40
    Points : 12
    Points
    12
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    du cote client
    send(sock,pseudo,sizeof(pseudo),0)
     
    du cote serveur
    recv(csock,pseudo,sizeof(pseudo)-1,0)
    Ensuite je ne fait que l'afficher dans un simple printf("%s",pseudo)

    mais sa ne march pas

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par king_neo2001
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    du cote client
    send(sock,pseudo,sizeof(pseudo),0)
    du cote serveur
    recv(csock,pseudo,sizeof(pseudo)-1,0)
    C'est un peu court comme code...

    De toutes façons, sizeof à l'émission, c'est pas bon. C'est strlen().

    Quand à la réception, c'est bien de réserver une place pour le 0, mais encore faut-il penser à le placer. Si tu ne récupères pas la valeur retournée par recv(), ça ne risque pas d'arriver...

    http://emmanuel-delahaye.developpez....eaux.htm#texte

    Enfin, pour afficher, c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf ("%s\n", pseudo);
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 40
    Points : 12
    Points
    12
    Par défaut
    bon du coté serveur
    j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    int error;
    int error3;
    char bufferSend[50];
                            color(9,0);
                            printf("<<<< %s DIT: ",nick);
                            fgets(bufferSend, sizeof(bufferSend), stdin);
                            error3= send(csock,nick,strlen(nick),0);
                            error = send(csock, bufferSend, strlen(bufferSend), 0);
                            color(7,0);
                            printf("\n...................Attente de la reponse du client (patientez svp)....\n\n");
                            if((error == SOCKET_ERROR) && (error3 == SOCKET_ERROR))
                            {
                                color(4,0);
                                printf(":-/ erreur de connection client en emission !\n");
                                go = 0;
    du cote client j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int error error3;
    error = recv(sock, bufferRecv, sizeof(bufferRecv)-1, 0);
                    error3 = recv(sock, nick, sizeof(nick)-1,0);
                    if((error == SOCKET_ERROR) && (error3 == SOCKET_ERROR))  go = 0;
                    else
                    {
                        nick[error3] = '\0';
                        bufferRecv[error] = '\0';
                        color(12,0);
                        printf(">>>> %s DIT: %s\n",nick,bufferRecv);
                    }
                }
    Ceci bloque des que le client se connecte je ne peut rien faire et la socket se ferme. par le meme systeme j'arrive a envoyer le pseudo du client mais la pour le serveur sa ne marche pas. Si quelqu'un peut m'aider

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par king_neo2001
    <...>
    Ceci bloque des que le client se connecte je ne peut rien faire et la socket se ferme. par le meme systeme j'arrive a envoyer le pseudo du client mais la pour le serveur sa ne marche pas.
    Il ne faut pas espérer recevoir 2 trames séparées alors qu'on en envoie 2 à la suite... En fait, la réception ne doit faire aucune hypothèse sur la façon sont sont émises les trames. Elle doit être bouclée et complètement souple.

    http://emmanuel-delahaye.developpez....eaux.htm#texte
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 40
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Il ne faut pas espérer recevoir 2 trames séparées alors qu'on en envoie 2 à la suite... En fait, la réception ne doit faire aucune hypothèse sur la façon sont sont émises les trames. Elle doit être bouclée et complètement souple.

    http://emmanuel-delahaye.developpez....eaux.htm#texte
    Lol mais pour l'envoi du pseudo du client je fait exactement la meme chose et cela fonctionne sans souci. Que dois je faire du cote serveur pour que cela fonctionne aussi?

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par king_neo2001
    Lol mais pour l'envoi du pseudo du client je fait exactement la meme chose et cela fonctionne sans souci. Que dois je faire du cote serveur pour que cela fonctionne aussi?
    Peu importe que ça fonctionne par hasard dans un cas. Dans tous les cas, il faut faire ce que j'ai indiqué.

    D'autre part, je conseille d'élaborer un protocole applicatif qui définit 2 choses :
    - Le format des données transmises (lignes de textes : quelle terminaison ?)
    - Les séquences des échanges (commande/réponse) : assure la régulation du flux.
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 40
    Points : 12
    Points
    12
    Par défaut
    donc si j'écoute ce que tu me dis je peut garder mes deux send mais je ne dois avoir que un seul recv qui fasse la concaténation des deux flux que je recois c'est bien sa?

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pour moi, ce serait plutôt le contraire: ne jamais faire confiance à "un seul recv()", même si on a fait le send() en une fois.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    ce qu'on veut dire c'est que la manière normale de procéder est que ton message soit formatté d'une manière telle qu'il contienne la TAILLE de ce qui va suivre , éventuellement un séparateur, puis le contenu du message, et éventuellement un séparateur.

    Côté réception, quand tu reçois quelque chose, tu as une boucle de recv. si tu tombes sur le début d'un message, tu stocke la taille dans une varaible et tu boucle jusqu'à ce que tu aies lu la taille donnée...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. question Client- Serveur
    Par id.prog dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 30/03/2008, 19h36
  2. [debutant][Client-serveur] Question sur les sockets
    Par skwi6 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 06/11/2006, 15h04
  3. Question sur client-serveur
    Par Royd938 dans le forum Développement
    Réponses: 4
    Dernier message: 03/11/2006, 14h03
  4. question client serveur
    Par zais_ethael dans le forum Débuter
    Réponses: 4
    Dernier message: 25/07/2006, 13h39
  5. Question client-serveur socket
    Par Lex99 dans le forum Développement
    Réponses: 3
    Dernier message: 07/02/2006, 09h01

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