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. #101
    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 518
    Points
    41 518
    Par défaut
    Si le serveur sérialise et désérialise déjà correctement, tu n'auras pas besoin de le modifier (donc ce n'est pas grave si tu ne peux pas).
    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.

  2. #102
    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
    Hé bien je ne sais pas trop ce que fais le serveur ... Tout ce que je sais c'est que pour l'instant le code est réalisé en Automation Basic ...


    Concernant le refactoring du code ... Compte tu faire tout le code ? Ou m'as tu montré un exemple pour que je puisse continuer a faire le reste ? Parce que j'ai vu que tu as utilisé des define ... Donc je supose que tu as commencé a modifié tout le code ... Donc voila ... Je ne sais pas quoi ! Merci de ta réponse ... J'vais commencer quand meme a chipoter a ca histoire de pouvoir rentrer dans la sérialization !


    Merci encore pour tout !

  3. #103
    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 518
    Points
    41 518
    Par défaut
    Je suis en train de bosser sur pratiquement tout le code que tu m'as passé.
    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.

  4. #104
    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
    Je suis en train de bosser sur pratiquement tout le code que tu m'as passé.
    Je ne saurais jamais comment te remercier ...

    Je ne suis qu'un étudiant ... Donc je ne pourrais pas faire de toi un homme riche ...

  5. #105
    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
    Je suis en train de bosser sur pratiquement tout le code que tu m'as passé.
    J'avais commencé aussi, mais je suis content de te laisser faire !
    Pas de Wi-Fi à la maison : CPL

  6. #106
    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 518
    Points
    41 518
    Par défaut
    Voici le code avec mes corrections (Edit: Supprimé, code corrigé dans le message #132).

    Je te préviens, ça compile, ça linke, mais je n'ai fait aucun test. Pas même des tests unitaires.

    Mais ce code corrigé devrait être plus maintenable que le code d'origine.
    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. #107
    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
    Et bien ... C'est un sacré lifting ... J'ai du mal a voir s'il reste une ligne de code qui vient de moi ...

    Je vais me plonger dans le code pour essayé de le comprendre ... Si jamais j'ai des questions tu restes abonnés a ce topic ? Histoire que je ne parle pas dans le vide ...

    Mais en tout cas, c'est vraiment gentil a toi de m'avoir donné un coup de pouce ...

    Concernant les test avec l'automate, je te dis quoi dés que j'ai compilé et pu tester !

  8. #108
    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
    Bonjour ... Déjà j'ai un ptit probleme a la compilation ... Il m'indique que la variable oldIndex n'est pas déclaré (‘oldIndex’ undeclared ) ... Par ailleur elle est déclarée mais entre un ifdef et endif ...

    Et comme j'ai encore un peu de mal avec cette partie de serialization ... Je ne sais pas trop comment faire :s...

  9. #109
    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
    Bon j'ai mis les ifdef et endif en commentaire ... La compilation s'effectue ... Je lance le soft et il me sort : calcule checksum pas bon ... :'( sniff sniff ... Alors je me dis que maintenant avec la serialization et la deserialization, que l'automate de l'autre coté, calcule mal son checksum ... :s hors cela fonctionnait sous windows

    Quel galère :'(

  10. #110
    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
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    int taille_a_recevoir = 2;
     
          int taille_recue = 0;
     
          int bRecuTaille = 0; /*Booléen*/
     
          do{
     
    	int cbRecu = recv(pAppStatus->clientSock, (char*)&recbuf[taille_recue], MAXSIZEPACKET-taille_recue, 0);
     
    	if(cbRecu < 0){
     
    	  taille_recue = SOCKET_ERROR;
     
    	  break;
     
    	}
     
     
     
    	taille_recue += cbRecu;
     
     
     
    	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;
     
    	}
     
     
     
          } while(taille_recue < taille_a_recevoir);
    J'ai aussi un peu de mal avec cette partie la ... C'est pour tester si le nombre de caractere recu correspond bien a la taille indiquée dans le paquet ... CAD le tableau ?

  11. #111
    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 ... Je me pose des questions au niveau du calcul du checksum :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    unsigned short checksum16(void const *addr, size_t cbLen){
     
      size_t index = 0;
     
      unsigned short w;
     
      unsigned short sum = 0;
     
      unsigned short answer = 0;
     
     
     
      assert(addr != NULL);
     
     
     
      // Somme des données pris deux par deux.
     
      while(index < cbLen){
     
        Deserialize_word_u(addr, &w, &index);
     
        sum = (unsigned short)(sum + w);
     
      }
     
      // Calcule du complément à 1 sur 16bits.
     
      answer = ~sum;
     
      // Envoie de la valeur du checksum calculé.
     
      return(answer);
     
    }
    Comment fait la boucle pour se deplacer ? Alors que l'on ne decremente pas le cbLen et que l'on ne fait pas varier w pour se deplacer dans la mémoire ?

  12. #112
    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 518
    Points
    41 518
    Par défaut
    Alors, pour le coup des oldindex, c'est que l'assertion n'est pas définie pareil chez toi (linux+gcc) et chez moi (Windows+Visual).
    Tu peux remplacer les #ifdef _DEBUG par des #ifndef NDEBUG, qui me semble-t-il est le standard.

    Le code avec taille_a_recevoir sert à recevoir les données par petits bouts si nécessaire: Après avoir reçu au moins deux octets, on lit la vraie taille du paquet et on attend d'avoir reçu au moins cette taille.

    Le problème (qui était déjà présent dans ton ancien code, et que je ne vois que maintenant), c'est que si on reçoit plus que ce qu'on voulait, l'excédent, qui était sans doute le début d'un nouveau paquet, est perdu. Il faudrait remplacer MAXSIZEPACKET par taille_a_recevoir.

    Dans le calcul du checksum, la fonction Deserialize_word_u() incrémente la variable index.
    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. #113
    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'venais de comprendre a l'instant pour la boucle du checksum

    ... Concernant la partie pour recevoir le paquet ... Pourquoi recuprer le paquet par petite partie si necessaire ? On ne recoit pas le paquet en entier dans la partie donnée de la trame TCP ?
    Comment pourrais t'on recevoir plus ? Si dans le protocole qu'y a été défini, pour un packet envoyé, on a un paquet recu ... Avec des tailles fixes ... ?

    Je viens de faire des tests pour le checksum ... Le calcule que l'on fait pour essayé de trouver la meme valeur que le checksum recu dans le paquet, n'est pas similaire ... Mais le probleme, c'est que pour le même paquet ... Il calcule un checksum différent a chaque fois :s

    Voici les info's :
    Paquet ecrit dans le log:
    Execution numéro1
    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 : 55896
    Execution numéro 2
    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 : 35675
    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 ;(

  14. #114
    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 518
    Points
    41 518
    Par défaut
    Pour la réception: En mode TCP, il n'y a pas de notion de message: Il n'y a qu'une suite d'octets, et le socket ne sait pas où commence un paquet ni où fini l'autre.

    Donc, un paquet peut être reçu par petit bouts, ou bien si le réseau est encombré et que deux paquets sont envoyés à la suite, ils peuvent être reçus en une seule 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.

  15. #115
    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 518
    Points
    41 518
    Par défaut
    J'ai trouvé le problème du checksum: On le fait sur une structure désérialisée, donc on n'est pas réellement sûr de sa taille, en fait.

    Pour que le checksum marche bien, il faudrait remettre à zéro le checksum dans le buffer et faire la checksum dessus.
    ...Ou bien, resérialiser le paquet une fois la checksum mise à zéro et la refaire dessus également...
    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. #116
    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
    Pour la réception: En mode TCP, il n'y a pas de notion de message: Il n'y a qu'une suite d'octets, et le socket ne sait pas où commence un paquet ni où fini l'autre.

    Donc, un paquet peut être reçu par petit bouts, ou bien si le réseau est encombré et que deux paquets sont envoyés à la suite, ils peuvent être reçus en une seule fois...
    Oky ... Mais est ce que cela pourrait expliquer le probleme que je viens de detailler juste avant pour le checksum ? Du faite que l'on ne recupere jamais la meme chose dans le paquet .. Puisqu'il ne donne jamais la meme réponse .. Quand on voit le detail du calcule ... On voit que le debut est toujours le meme sauf a partir du moment ou il arrive sur le pointeur rawdata ...

  17. #117
    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 518
    Points
    41 518
    Par défaut
    Tiens, pour la checksum, essaie ceci à la place: La checksum est faite sur le paquet sérialisé et non sur la structure désérialisée...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    				// Test du checksum.
    				{
    					unsigned short returnChecksum;
     
    					recbuf[2] = 0;
    					recbuf[3] = 0;
    					returnChecksum = checksum16(recbuf, taille_recue);
    					printf("%u = %u\n", packet.checksum, returnChecksum);
    					printf("%X - %d - %u\n", packet.control, packet.lenght, packet.id);
     
    					if(packet.checksum == returnChecksum)
    						bChecksumOK = 1;
    				}
    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.

  18. #118
    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
    J'ai trouvé le problème du checksum: On le fait sur une structure désérialisée, donc on n'est pas réellement sûr de sa taille, en fait.

    Pour que le checksum marche bien, il faudrait remettre à zéro le checksum dans le buffer et faire la checksum dessus.
    ...Ou bien, resérialiser le paquet une fois la checksum mise à zéro et la refaire dessus également...
    Je vais tester en passant le buffer plutot que le packet a la fonction checksum !

    merci en tout cas pour le temps que tu passes a m'aider ... Je serais ravis dans un futur de pouvoir t'aider pour quoi que se soit !

  19. #119
    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 518
    Points
    41 518
    Par défaut
    As-tu vu mon message précédent ?
    Si ça se trouve, tu étais déjà en train de taper quand j'ai posté, ce serait bète que tu le loupes...
    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.

  20. #120
    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
    As-tu vu mon message précédent ?
    Si ça se trouve, tu étais déjà en train de taper quand j'ai posté, ce serait bète que tu le loupes...
    Oui je l'ai vu après avoir posté le mien ... Je viens d'essayé ton idée ! Et je suis heureux de pouvoir t'annoncer que ca fonctionne ! J'ai bien le même checksum des deux cotés ! Pfuiiii

    Merciiiiiiii beaucoup encore une fois ! Je ne sais pas ce que j'aurai fais sans toi !

    Gros Bizou a toi !

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/05/2005, 10h50
  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, 10h47
  3. Livre sur la programmation linux (shell et noyau)
    Par Tchetch dans le forum Linux
    Réponses: 10
    Dernier message: 07/07/2004, 09h27
  4. [Kylix] probleme execution programme
    Par vin's dans le forum EDI
    Réponses: 1
    Dernier message: 31/03/2004, 13h25
  5. Pb passage programme linux->visual C++
    Par StephP dans le forum MFC
    Réponses: 3
    Dernier message: 16/01/2004, 13h56

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