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

C Discussion :

Probleme excecution programme [Linux]


Sujet :

C

  1. #121
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 302
    Points : 78
    Points
    78
    Par défaut
    Hum ... Il y a un ptit bug ...

    J'ai rajouté les ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
          // Erreur lors de la fonction rec().
     
          if(taille_recue==SOCKET_ERROR){
     
    	pAppStatus->step = STEP_END;
     
    	printf("Erreur fonction recv()\n");
     
    	printf("Errno : %d\n", errno);
     
    	fprintf(stderr, "pErrno : %s\n", strerror(errno));
     
          }
    Parce que le programme plantait a la fonction recv() ...
    Voici ce que ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Erreur fonction recv()
    Errno : 0
    pErrno : Success
    Il ne fait jamais l'erreur au meme moment ... Je pense que c'est au moment de recevoir le paquet status and measure reading ...

    Un probleme dans la transition :s

  2. #122
    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
    Il faut lire errno plus haut et la mémoriser, je pense.
    Et aussi régler errno à une valeur choisie quand il s'agit d'une erreur de taille...
    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.

  3. #123
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 302
    Points : 78
    Points
    78
    Par défaut
    J'vais aller le mettre juste a cote de recv alors ...

    ...

    Ca donne le même resultat avec le errno juste après le recv ... Et j'ai initialisé errno à 0 au debut de la fonction aussi ...

    Car il me semble que errno affiche la derniere erreur encourue ... Comme je l'ai mis juste après le recv() ca devrait normalement m'afficher l'erreure encourue ... Mais ca me met tout le temps le meme resultats, meme quand la fonction recv() "fonctionne" ca m'affiche les meme resultat au niveaux des erreur ... :s

  4. #124
    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
    Alors, c'est qu'il y a une erreur de taille.
    Soit un problème dans les données transmises, soit c'est mon code qui reçoit mal.
    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.

  5. #125
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 302
    Points : 78
    Points
    78
    Par défaut
    C'et juste un probleme pour un type de paquet :
    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
     
    typedef struct
     
    {
     
    	char control;
     
    	char lenght;
     
    	unsigned short checksum;
     
    	unsigned short packetID;
     
    	unsigned short val[NBSTATUS];
     
    } statMeasRead;
    Je pense que ca intervient quand nous recevons se paquet la ... Qu'y est le plus grand soit dis en passant ... Dans les premiere version de mon code, j'avais aussi un probleme avec ce paquet ... Quand je le recevais, ca m'indiquait une taille de -108 pour la taille du paquet (dans le champs lenght de packet) ...

  6. #126
    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
    Es-tu certain que la longueur est censée être signée ?
    -108 équivaut à 148 pour un octet...

    Si la taille est censée être non-signée, il y aura des corrections extensives à faire...
    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.

  7. #127
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 302
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Es-tu certain que la longueur est censée être signée ?
    -108 équivaut à 148 pour un octet...

    Si la taille est censée être non-signée, il y aura des corrections extensives à faire...
    Je vais afficher la taille voir ce qu'il me donne ...

  8. #128
    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
    À mon avis, ce n'est pas une question d'afficher la taille, mais de comment on la traite.
    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.

  9. #129
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 302
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    À mon avis, ce n'est pas une question d'afficher la taille, mais de comment on la traite.
    Bah ce qui m'étonne quand meme c'est quand je vois le gardien du if ...

    taille_recue==SOCKET_ERROR ... ca veut dire que soit il garnit pas la taille ... et donc il garde la valeur... Donc ca veut dire qu'il passe dans if(cbRecu < 0) ...

    Soit il y a un stress dans recv();
    Hors s'il y a un stress dans recv(); le errno ne devrait pas avoir la valeur qu'il a ...

  10. #130
    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
    N'oublie pas que le code met lui-même la taille reçue à SOCKET_ERROR si length est inférieur à 2...
    Et puisque la taille arrive négative, ben alors elle est inférieure à 2...

    Donc, je te repose la question:
    Es-tu sûr que la taille (le champ length de tes structures) doit être signée ?
    Les tailles supérieures à 127 sont-elles autorisées ?
    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. #131
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 302
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    N'oublie pas que le code met lui-même la taille reçue à SOCKET_ERROR si length est inférieur à 2...
    Et puisque la taille arrive négative, ben alors elle est inférieure à 2...

    Donc, je te repose la question:
    Es-tu sûr que la taille (le champ length de tes structures) doit être signée ?
    Les tailles supérieures à 127 sont-elles autorisées ?
    Non elles ne doivent pas etre signée ... Donc je pourrais mettre unsigned char ...
    Et tu veux parler de taille 127 pour la lenght ? mais comme un char est sur 8bits ca fait 255 ... Donc la valeur est dans le range ... (si c'est ca que tu veux dire)

    Mais je viens d'afficher la valeur de cbrecu ... Il vaut bien 148 la bonne taille ...

    Mais le probleme c'est que j'ai aussi mis un printf dans le if(cbRecu < 0) mais il ne l'affice pas ... Donc ca veut bien dire que le cbrecu est correct ...

  12. #132
    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 Code de checksum corrigé
    Tiens, j'ai corrigé:
    Fichiers attachés Fichiers attachés
    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.

  13. #133
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par nuFox Voir le message
    mais comme un char est sur 8bits ca fait 255 ... Donc la valeur est dans le range ... (si c'est ca que tu veux dire)
    char : -128 - 127
    unsigned char 0 - 255

  14. #134
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 302
    Points : 78
    Points
    78
    Par défaut
    Enfait l'erreur vient de la :
    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
     
    	if(!bRecuTaille && taille_recue >= taille_a_recevoir){
     
    	  char byTaille = recbuf[1]; /*Octet de longueur*/
     
    	  if(byTaille < NETSIZE_OF_packetRec_HEADER){
     
    	    taille_recue = SOCKET_ERROR;
     
    	    break;
     
    	  }
     
    	  taille_a_recevoir = byTaille; 
     
    	  bRecuTaille = 1;
     
    	}
    Quand on recupere la taille byTaille dans le tableaux, a mon avis c'est la que l'on recupere le -108 et donc la taille est inférieur a NETSIZE_OF_packetRec_HEADER ... Alors j'ai mis le char byTaille en unsigned et alors la ca fonctionne ...

  15. #135
    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
    Et moi j'ai corrigé encore plus, en mettant length en unsigned dans toutes les structures, et j'ai corrigé les fonctions de sérialisation...

    Voir message #132...
    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.

  16. #136
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 302
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Et moi j'ai corrigé encore plus, en mettant length en unsigned dans toutes les structures, et j'ai corrigé les fonctions de sérialisation...

    Voir message #132...
    Quelle bete ce Medinoc ! Je t'adore ! :p

    Pfff ... n'empeche pour une fois que je trouvais un probleme ... ... Et toi direct tu me sors une correction de fou ... alalala

    Merci pour tout

  17. #137
    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 Médinoc Voir le message
    Tu peux remplacer les #ifdef _DEBUG par des #ifndef NDEBUG, qui me semble-t-il est le standard.
    Je confirme.

    Citation Envoyé par nuFox Voir le message
    <...>
    Execution numéro 3
    Paquet ecrit dans le log:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Receive:;12;0C;F3EA;0000;0001;0001;0001;
    Checksum :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Checksum recu : 62442
    Checksum calcule : 14734
    C'est quand même vachement bizzar .. Parce que s'il ne trouve pas la meme valeur ok ... c'est qu'il y a un bug ... Mais la il ne donne pas la meme valeur a chaque execution ce qui est encore plus bizzar ;(
    Il est clair que si F3EA (62442 en décimal) est le checksum qui a été placé dans la trame, cette valeur est fausse...
    Pas de Wi-Fi à la maison : CPL

  18. #138
    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
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Je confirme.

    Il est clair que si F3EA (62442 en décimal) est le checksum qui a été placé dans la trame, cette valeur est fausse...
    Pas si fausse que ça selon l'algorithme donné dans la fonction de checksum:
    Somme de tous les mots (avec 0 à la place de la checksum) en little-endian, puis complément à 1.
    • Donne : ~(0x0C12 + 0x0000 + 0x0000 + 0x0001 + 0x0001 + 0x0001)
    • = ~0x0C15
    • = 0xF3EA
    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.

  19. #139
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 302
    Points : 78
    Points
    78
    Par défaut
    Tout est dans le complément a 1

  20. #140
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 302
    Points : 78
    Points
    78
    Par défaut
    Hum ...
    Medinoc ? J'ai un probleme a la compilation avec ton code ...

    J'ai l'erreure suivante :
    /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crt1.o: In function `_start':
    (.text+0x18): undefined reference to `main'
    collect2: ld a retourné 1 code d'état d'exécution

    Seulement je ne sais pas du tout d'ou ca vient ...

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/05/2005, 09h50
  2. [TP]Problème de programme exécutable en mode graphique
    Par GoodVibe dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 24/09/2004, 09h47
  3. Livre sur la programmation linux (shell et noyau)
    Par Tchetch dans le forum Linux
    Réponses: 10
    Dernier message: 07/07/2004, 08h27
  4. [Kylix] probleme execution programme
    Par vin's dans le forum EDI
    Réponses: 1
    Dernier message: 31/03/2004, 12h25
  5. Pb passage programme linux->visual C++
    Par StephP dans le forum MFC
    Réponses: 3
    Dernier message: 16/01/2004, 12h56

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