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 :

[C] Probleme avec socket client-serveur TCP


Sujet :

Réseau C

  1. #21
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int cpt_jouer(char * pTab)  //compte le nombre de coup joués dans la partie
    {
      int i;
      int cpt=9;
    ....
      return cpt;
    }
    est ce que la variable "cpt" existe toujours, après l'appel de la fonction???
    Non, les variables locales pTab, i et cpt sont détruites en sortie de la fonction. Par contre, le return cpt te permet de récupérer la valeur qu'avait cpt avant sa destruction. Donc le code est Ok.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int get_x(char * pInput, int pX)  //parse X et Y
    {	
      pX = pInput[6] - '0';
      return pX;
    }
    pX est un argument de la fonction : Au moment de l'appel de cette fonction, une variable locale pX est créée et initialisée avec la valeur placée dans l'appel. De cette valeur, tu ne fais rien puisque la première chose que tu écris est px =.... Ce n'est donc pas un argument. On devrait avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int get_x(char * pInput)  //parse X et Y
    {	
      int pX = pInput[6] - '0';
      return pX;
    }
    ou simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int get_x(char * pInput)  //parse X et Y
    {	
      return pInput[6] - '0';
    }
    avec en appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int test_jouer(char * pInput)
    {
    	int x, y;
    	x = get_x(pInput);
    	y = get_y(pInput);
        return ((x>0 && x<4) && (y>0 && y<4));
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void msg_saisi(int pX, int pY)  //invite de saisie
    {
      printf("\nSaisie case a jouer (X Y) : ");
      scanf("%d %d", &pX, &pY);
    }
    Pour modifier une variable du code appelant une fonction, en dehors de l'utilisation du return, il faut connaître son adresse. Ici, tu ne transmet pas l'adresse de pX et pY mais leur valeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void msg_saisi(int * ppX, int*  ppY)  //invite de saisie
    {
      printf("\nSaisie case a jouer (X Y) : ");
      scanf("%d %d", ppX, ppY);
    }
    avec un appel du genre
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  2. #22
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    Merci pour ces explication, j'avais deja effectué les changements (j'ai mis à jour les P.J).

    En tous cas si tu captes d'autres erreurs n'hesites pas à me les signaler.

    Merci encore.

  3. #23
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    Bonjour,

    je voulais savoir, s'il n'y aurait pas une personne sur le forum qui puisse m'aider.

    Car mon projet est à rendre pour la fin de la semaine, et pour ceux qui ont suivit mes posts depuis le debut savent que je planche dessus depuis plus d'un mois...

    Donc je ne demande aucunement, de faire mon projet à ma place, mais simplement de m'aider à trouver ce qui ne va pas dans mon programme.

    C'est un appel de detresse que je lance...

    Merci à tous ceux qui voudront bien m'aider, car seul je n'y arriverai jamais.

    De plus il serait vraiment dommage que je me ramasse une mauvaise juste à cause d'un detail que je ne vois pas.

    Merci

    PS: le truc qui ne fonctionne pas bien, c'est que le client a toujours un message de retard ...


    Algo:
    Serveur:
    • envoie une invite au client avec l'etat du jeu
    • receptionne les coordonnées envoyées par le premier cleint
    • test si les coordonnées sont bonnes (case vide, si le joueur gagne...)
    • si c'est ok, il envoie au client OK et l'etat du jeu
    • sinon il renvoie INVALIDE et l'eat du jeu
    • Si le compteur de tour arrive à 8 et qu'il n'y a pas de gagnant il envoie NUL et etat du jeu au 2 joueurs


    Client:
    • reception (OK ou INVALIDE) + l'etat du jeu
    • envoie les coordonnées avec l'entete JOUER
    • et il boucle dessus, jusque reception du message de victoire ou de nul


    Voila en gros mon programme

  4. #24
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void traiterClient(Joueur j, char * pMorpion)
    {
      char *pData=malloc(sizeof(char)*1024);
      char buf[1024];//=malloc(sizeof(char)*1024);
      int x, y, rval;
     
      do
      {
        bzero(buf, sizeof(buf));
        bzero(pData,sizeof(pData));
    La dernière ligne ne remet le buffer pData à zéro : sizeof(pData) = taille d'un pointeur (typiquement 4), pas la taille du tableau pointé
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #25
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    MErci pour ton aide.
    Meme si je dois avoué que je n'ai pas trop compris le probleme qui est engendré par cette erreur...


    j'ai aussi capté une erreur, j'envoie deux fois le message "MSG + etat du jeu " au client alors que je devrais le faire qu'une fois...

    je sens que je m'approche petit à petit du but...

    PS: j'ai actualisé les codes donnés.

  6. #26
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    Autre chose, est ce que quelqu'un aurait une idée de comment coder, une fonction qui demande au le joueur gagnant si il souhaite refaire une partie, si il dit oui on recommence...

    j'avais pensé à faire un genre de

    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
    16
    17
    18
    19
    20
    21
    22
    23
     
    sprintf(pData,"Voulez vous jouer une nouvelle partie ??? O/N \n");
    write(j.sock,pData,1024);
    read(j.sock,buf,1024);
    oui=strcmp("O",buf);
    non=strcmp("N",buf);
     
    while(oui!=0 || non !=0)
    {
      write(j.sock,pData,1024);
      read(j.sock,buf,1024);
      oui=strcmp("O",buf);
      non=strcmp("N",buf);
     
    }
    if(oui==0)
    {
      //recommencer le jeu
    }
    else
    {
      //quitter le jeu
    }
    le hic c'est que je vois pas trop comment je pourrais coder le "recommencer jeu" et le "quitter jeu"...

  7. #27
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    A mon avis avant de rajouter des fonctionnalités, tu devrais plutôt faire en sorte que les actuelles fonctionnent (ce n'est pas méchant hein).

    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  8. #28
    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
    pour quitter, c'est facile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ( oui )
      exit (EXIT_SUCCESS);
    Maintenant pour le recommencer, il faudrait inclure tout ton code jusquelà y compris dans un

    initialisé à oui=0.

    Et du coup tu n'as plus besoin du exit...

    A la sortie du while tu es à la sortie du main..
    "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

  9. #29
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    Citation Envoyé par Skyrunner
    A mon avis avant de rajouter des fonctionnalités, tu devrais plutôt faire en sorte que les actuelles fonctionnent (ce n'est pas méchant hein).

    Lol, je sais bien. Tu as parlé comme mon prof...

  10. #30
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    Citation Envoyé par souviron34
    pour quitter, c'est facile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ( oui )
      exit (EXIT_SUCCESS);
    Maintenant pour le recommencer, il faudrait inclure tout ton code jusquelà y compris dans un

    initialisé à oui=0.

    Et du coup tu n'as plus besoin du exit...

    A la sortie du while tu es à la sortie du main..

    Merci beaucoup, pour ton aide, je garde cette idée (très bonne) de coté pour quand j'aurai fini de corriger ce qui ne va pas encore.


  11. #31
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    Bonsoir,

    j'ai résolu mon problème...

    Je mettrai à disposition mon code source une fois que j'aurai un peu de temps.

    Cependant j'aimerai ajouter des fonctionnalités à mon jeu mais je sais pas lesquelles...

    J'avais pensé à demander au vainqueur s'il souhaite refaire une partie, mais il me reste 3 jours pour le faire...

    Alors si vous avez quelques idées à me soumettre (qui ne prendront pas beaucoup de temps à la realisation), je suis preneur.

    Merci.

  12. #32
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par juve1897
    Bonsoir,

    j'ai résolu mon problème...

    Je mettrai à disposition mon code source une fois que j'aurai un peu de temps.

    Cependant j'aimerai ajouter des fonctionnalités à mon jeu mais je sais pas lesquelles...

    J'avais pensé à demander au vainqueur s'il souhaite refaire une partie, mais il me reste 3 jours pour le faire...

    Alors si vous avez quelques idées à me soumettre (qui ne prendront pas beaucoup de temps à la realisation), je suis preneur.

    Merci.
    Tu sauvegardes ton code. Et tu modifies une copie pour essayer d'ajouter des trucs comme refaire jouer le joueur qui a gagné.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  13. #33
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    Merci, du conseil, mais je suis pas fou au point de faire des modif' dans un code qui marche à merveille.


    Cependant, je pensais aussi faire rejouer le joueur "gagnant" de la partie, mais je vois pas comment faire...

    De plus j'ai peur que ça me prenne trop de temps et que je fasse un début de travail pour rien.

  14. #34
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par juve1897
    Merci, du conseil, mais je suis pas fou au point de faire des modif' dans un code qui marche à merveille.


    Cependant, je pensais aussi faire rejouer le joueur "gagnant" de la partie, mais je vois pas comment faire...

    De plus j'ai peur que ça me prenne trop de temps et que je fasse un début de travail pour rien.
    A toi de voir. souviron34 t'as montré la voie à suivre.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Probleme avec un Client Serveur de fichier
    Par kertimanoff dans le forum Général Java
    Réponses: 11
    Dernier message: 10/12/2009, 16h45
  2. [Reseau] probleme client/serveur TCP LInux
    Par jmjmjm dans le forum Réseau
    Réponses: 20
    Dernier message: 03/12/2006, 19h32
  3. Réponses: 1
    Dernier message: 11/05/2006, 11h46
  4. Socket client serveur
    Par rhdjml dans le forum Langage
    Réponses: 2
    Dernier message: 08/03/2006, 12h09
  5. client/serveur tcp/ip en c sous unix
    Par oclone dans le forum Développement
    Réponses: 8
    Dernier message: 19/04/2005, 18h55

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