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 :

Mon compilateur bug, ou peut etre moi !


Sujet :

C

  1. #1
    Membre averti Avatar de jbarreau-mainson
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    446
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 446
    Points : 412
    Points
    412
    Par défaut Mon compilateur bug, ou peut etre moi !
    Bonjour,

    Mon programme plante à son lancement en arrivant à cet étape, je ne vois pas vraiment pourquoi ?!

    C'est un client qui se connecte à un serveur, rien de très compliqué pourtant ...

    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
    #include "appli.h"
     
    t_client MyClient;
    WSADATA wsaData;
     
    char ip_serv[20] = "127.0.0.1";
     
    #define Sin (MyClient.sin)
    #define Sock (MyClient.sock)
    #define Buff (MyClient.buff)
     
    int Client(int sc, int pa)
    {
        switch(sc)
        {
        case CLIENT_INIT:
            Client(CLIENT_WSASTARTUP, 0);
            //Création de la socket client : Protocole IPv4, Flux de données binaires, Protocole TCP ( mode "connecté")
            if((Sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
            {
                Fin("Echec lors de la création de la socket serveur.\n");
            }
     
            Sin.sin_family = PF_INET;
            Sin.sin_addr.s_addr = inet_addr(ip_serv); /*** ICI BUG ! ***/
            Sin.sin_port = htons(atoi(PORT));
            break;
    }
     
    (...)
    }

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Sin est bien de type struct sockaddr_in ?

  3. #3
    Membre averti Avatar de jbarreau-mainson
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    446
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 446
    Points : 412
    Points
    412
    Par défaut
    tout à fait :

    //Client.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct tt_client {
        SOCKET sock;
        SOCKADDR_IN sin;
        char *buff;
    }t_client;

  4. #4
    Membre habitué Avatar de sopsag
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 224
    Points : 190
    Points
    190
    Par défaut
    Je vois une récursion dans ta fonction...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int Client(int sc, int pa)
    {
        switch(sc)
        {
        case CLIENT_INIT:
            Client(CLIENT_WSASTARTUP, 0);
    Es tu sûr de bien éviter la récusion infnie ?
    (tu ne nous donnes pas le cas CLIENT_WSASTARTUP...)

  5. #5
    Membre habitué Avatar de sardik
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 135
    Points : 143
    Points
    143
    Par défaut
    Tu as essayer un petit coup de GDB pour avoir un message d'erreur "parlant" ?

  6. #6
    Membre averti Avatar de jbarreau-mainson
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    446
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 446
    Points : 412
    Points
    412
    Par défaut
    Es tu sûr de bien éviter la récusion infnie ?
    (tu ne nous donnes pas le cas CLIENT_WSASTARTUP...)
    La fonction client est en fait un switch case.
    le CLIENT_**** est en fait un service.

    Il n'y a pas de problème à ce niveau, CLIENT_WSASTARTUP ayant pour but d'initialiser la DLL permettant d'utiliser les sockets sous windows.

    Tu as essayer un petit coup de GDB pour avoir un message d'erreur "parlant" ?
    Je ne connaissais pas, je vais regarder de ce côté !

  7. #7
    Membre averti Avatar de jbarreau-mainson
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    446
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 446
    Points : 412
    Points
    412
    Par défaut
    Bon je viens de trouver le problème après un coup de debugger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sin.sin_port = htons(atoi(PORT));
    Ce qui est en rouge est à retirer ...

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/03/2012, 17h50
  2. Mon pc est peut etre victime de hackers.
    Par aziz jim dans le forum Sécurité
    Réponses: 7
    Dernier message: 06/03/2008, 16h43
  3. EDBEngineError : "... ne peut etre utilisee avec ce pil
    Par Dev_Michael dans le forum Bases de données
    Réponses: 1
    Dernier message: 16/03/2005, 16h15

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