Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec SDL_Net

Ce programme marche trop bien ...

    7 juillet 2007 à 13:46:40

    Salut ! :)

    Voilà j'ai un ptit souci avec mon programme, je me sers de SDL et SDL_Net, le tout codé en C/C++

    voilà mon code :
    class Connexion{

    private:

            bool m_ouverte;
            char m_hote[20];
            Uint16 m_port;
            IPaddress m_adresse;
            TCPsocket m_socket;



    public:

            Connexion(const char*hote, Uint16 port){

                    static bool SDL_Net_Initialise = false;

                    if(!SDL_Net_Initialise)
                    {       
                            if(SDLNet_Init() == -1)
                            fprintf(stdout,"Impossible de charger l'extension NET.");
                            SDL_Net_Initialise = true;
                    }

                    strcpy(m_hote,hote);
                    m_port = port;
                   
                    m_ouverte = false;

            }


            int ouvrir(){

                    SDLNet_ResolveHost(&m_adresse,m_hote,m_port);
                    m_socket = SDLNet_TCP_Open(&m_adresse);
                   
                    if(m_socket == NULL){

                    fprintf(stdout,"Impossible de se connecter a %s port %i\n", m_hote, m_port);
            SDLNet_TCP_Close(m_socket);
                    return -1;
                    }else{

                    m_ouverte = true;
                    fprintf(stdout,"Connexion a %s port %i : OK\n",m_hote, m_port);
                    return 1;
                    }

            }

            bool const estOuverte(){

            return m_ouverte;

            }




    };



    Quand j'appelle la méthode ouvrir(), tout fonctionne en apparence et la console me renvoie le message "connexion : ok"
    seul problème : même quand je tape n'importe quoi en adresse ip (vous voulez un exemple ? :D disons kmupfschreçnao) la console me renvoie Connexion : ok donc ya un souci ^^ je suis passé par le déboguage de vc++ et m_socket n'est pas NULL mais vaut quelque chose du genre 0x00c25958 que je crois être de l'hexadecimal. Je ne comprends pas où j'ai foiré dans mon code :euh:

    voilà merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      7 juillet 2007 à 14:43:54

      Tu l'as initialisé à NULL dans le constructeur ? Je n'ai connais pas cette extension, je ne peux pas t'aider, désolé ;)
      • Partager sur Facebook
      • Partager sur Twitter
        8 juillet 2007 à 1:07:15

        ben m_socket devrait être NULL si il n'y a aucun serveur auquel se connecter :( sauf si je me plante
        d'autres idéees ?
        • Partager sur Facebook
        • Partager sur Twitter
          8 juillet 2007 à 23:05:18

          m_socket ne devrait pas être un pointeur?
          • Partager sur Facebook
          • Partager sur Twitter
            9 juillet 2007 à 15:53:53

            Slt

            Citation : Mister Patate

            0x00c25958 que je crois être de l'hexadecimal


            Les seul caractére de l'héxadécimal sont 0 1 2 3 4 5 6 7 8 9 a b c d e f
            et vu que tu as un x je pense qu'il ya a une érreur par là...
            Désolé de ne pas pouvoir plus t'aider.
            • Partager sur Facebook
            • Partager sur Twitter
              9 juillet 2007 à 17:07:48

              Rha.
              0x[nombre_hexa] désigne [nombre_hexa] en C++, ou nombre_hexa est l'écriture hexadécimale d'un nombre.

              Je repose la question : m_socket ne devrait pas être un pointeur?
              • Partager sur Facebook
              • Partager sur Twitter
                10 juillet 2007 à 11:49:58

                Ok autant pour moi et merci pour l'info.
                • Partager sur Facebook
                • Partager sur Twitter
                  15 juillet 2007 à 12:32:04

                  désolé, à cause d'un problème avec internet je n'ai pas pus répondre à vos questions avant maintenant,
                  donc pour l'héxadécimal Alp en a déjà parlé ;) et sinon je ne crois pas que m_socket doive être un pointeur , je me base sur ce code tiré d'un tuto :

                  TCPsocket Socket;
                  IPaddress Hote;

                  SDLNet_ResolveHost(&Hote,"irc.freenode.net",6667); // Pour se connecter à
                                                                         // irc.freenode.net:6667

                  Socket = SDLNet_TCP_Open(&Hote);

                  // Maintenant Socket contient une socket valide que l'on peut utiliser
                  //   pour communiquer, ou est égale à NULL
                  if(Socket==NULL)
                      std::cout<<"Impossible de se connecter\n";


                  issu de ce tuto
                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 juillet 2007 à 12:49:46

                    En effet, tu ne dois pas écrire TCPSocket* car TCPSocket est un typedef ...
                    Plus de précisions : http://jcatki.no-ip.org/SDL_net/SDL_net_49.html#SEC49
                    je viens de voir cela.

                    Lorsque tu reprends un exemple de base sur la doc de SDL_Net, tu n'as aucun soucis? Une méthode (car je n'ai jamais utilisé cette lib) est de partir de l'exemple, et de rajouter petit à petit tant que tu n'as aucun bug ce qu'il y a dans ton code actuel, et voir où se trouve l'erreur. Pas la peine de tourner en rond pendant 2 jours, cible uniquement le code de la connexion.


                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 juillet 2007 à 16:13:35

                      Merci Alp, c'est déjà ce que je fais d'habitude (patir d'un exemple et modifier peu à peu) mais ici je n'ai trouvé aucun code sur le net ressemblant à ce que je voulais faire, à savoir une connexion en OO avec SDL_Net, et j'ai repris le plus de code fonctionnel possible pour réduire les erreurs.

                      Je précise ce que j'avais dit précedemment : lorsque je lance le serveur sur mon pc et le client en même temps , je tape "localhost" en adresse de l'hôte, il se connecte, lorsque je ne le lance pas , il me dit "impossible de se connecter", lorsque je tape n'importe quoi comme adresse ip, que le serveur soit lancé ou non il me dit "connexion ok", je trouve cela étrange o_O

                      D'autres suggestions/conseils ? :euh:
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Problème avec SDL_Net

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown