Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SFML] Probleme avec l'envoie de socket

Sujet résolu
    31 mars 2008 à 18:45:00

    Bonjour,
    Cela fesait quelque temps que je voulais me lancer dans le réseau et j'ai decouvert une librairie formidable à tout faire enfin presque la SFML.

    Le probleme est que je n'arrive pas à envoyer un socket mais avec un exemple très simple :
    1. #include <SFML/System.hpp>
    2. #include <SFML/Network.hpp>
    3. #include <iostream>
    4. #include <string>
    5. using namespace std;
    6. int main()
    7. {
    8.     // Ask for server address
    9.     sf::IPAddress ServerAddress("www.siteduzero.com");
    10.     // Create a UDP socket for communicating with server
    11.     sf::SocketUDP Client;
    12.     // Send a message to the server
    13.     char Message[] = "Hi, I'm a client !";
    14.     if (Client.Send(Message, sizeof(Message), ServerAddress, 80) != sf::Socket::Done)
    15.     {
    16.         cout << "erreur" << endl;
    17.     }
    18.     std::cout << "Message sent to server : \"" << Message << "\"" << std::endl;
    19.     // Close the socket when we're done
    20.     Client.Close();
    21.     return 0;
    22. }


    J'ai l'erreur suivante

    1. Message sent to server : "Hi, I'm a client !"
    2. *** stack smashing detected ***: ./HelloSFML terminated
    3. ======= Backtrace: =========
    4. /lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)[0xb7e24028]
    5. /lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x0)[0xb7e23fe0]
    6. ./HelloSFML(__gxx_personality_v0+0x343)[0x8048c0b]
    7. /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe0)[0xb7d4d450]
    8. ./HelloSFML(__gxx_personality_v0+0x39)[0x8048901]
    9. ======= Memory map: ========
    10. 08048000-08049000 r-xp 00000000 08:11 2064450    /home/julien/Programmation/C++/SFML/HelloSFML/bin/Debug/HelloSFML
    11. 08049000-0804a000 rwxp 00001000 08:11 2064450    /home/julien/Programmation/C++/SFML/HelloSFML/bin/Debug/HelloSFML
    12. 0804a000-0806b000 rwxp 0804a000 00:00 0          [heap]
    13. b7cf6000-b7d05000 r-xp 00000000 08:11 6095969    /lib/tls/i686/cmov/libresolv-2.7.so
    14. b7d05000-b7d07000 rwxp 0000f000 08:11 6095969    /lib/tls/i686/cmov/libresolv-2.7.so
    15. b7d07000-b7d09000 rwxp b7d07000 00:00 0 
    16. b7d09000-b7d0d000 r-xp 00000000 08:11 6094867    /lib/tls/i686/cmov/libnss_dns-2.7.so
    17. b7d0d000-b7d0f000 rwxp 00003000 08:11 6094867    /lib/tls/i686/cmov/libnss_dns-2.7.so
    18. b7d0f000-b7d11000 r-xp 00000000 08:11 5603514    /lib/libnss_mdns4_minimal.so.2
    19. b7d11000-b7d12000 rwxp 00001000 08:11 5603514    /lib/libnss_mdns4_minimal.so.2
    20. b7d12000-b7d1b000 r-xp 00000000 08:11 6094869    /lib/tls/i686/cmov/libnss_files-2.7.so
    21. b7d1b000-b7d1d000 rwxp 00008000 08:11 6094869    /lib/tls/i686/cmov/libnss_files-2.7.so
    22. b7d1d000-b7d1f000 rwxp b7d1d000 00:00 0 
    23. b7d1f000-b7d33000 r-xp 00000000 08:11 6094879    /lib/tls/i686/cmov/libpthread-2.7.so
    24. b7d33000-b7d35000 rwxp 00013000 08:11 6094879    /lib/tls/i686/cmov/libpthread-2.7.so
    25. b7d35000-b7d37000 rwxp b7d35000 00:00 0 
    26. b7d37000-b7e80000 r-xp 00000000 08:11 6094852    /lib/tls/i686/cmov/libc-2.7.so
    27. b7e80000-b7e81000 r-xp 00149000 08:11 6094852    /lib/tls/i686/cmov/libc-2.7.so
    28. b7e81000-b7e83000 rwxp 0014a000 08:11 6094852    /lib/tls/i686/cmov/libc-2.7.so
    29. b7e83000-b7e86000 rwxp b7e83000 00:00 0 
    30. b7e86000-b7e90000 r-xp 00000000 08:11 5603475    /lib/libgcc_s.so.1
    31. b7e90000-b7e91000 rwxp 0000a000 08:11 5603475    /lib/libgcc_s.so.1
    32. b7e91000-b7eb4000 r-xp 00000000 08:11 6094859    /lib/tls/i686/cmov/libm-2.7.so
    33. b7eb4000-b7eb6000 rwxp 00023000 08:11 6094859    /lib/tls/i686/cmov/libm-2.7.so
    34. b7eb6000-b7f9e000 r-xp 00000000 08:11 4915886    /usr/lib/libstdc++.so.6.0.9
    35. b7f9e000-b7fa1000 r-xp 000e8000 08:11 4915886    /usr/lib/libstdc++.so.6.0.9
    36. b7fa1000-b7fa3000 rwxp 000eb000 08:11 4915886    /usr/lib/libstdc++.so.6.0.9
    37. b7fa3000-b7faa000 rwxp b7fa3000 00:00 0 
    38. b7faa000-b7fb3000 r-xp 00000000 08:11 6799392    /usr/lib/libsfml-network.so.1
    39. b7fb3000-b7fb4000 rwxp 00008000 08:11 6799392    /usr/lib/libsfml-network.so.1
    40. b7fb4000-b7fb7000 r-xp 00000000 08:11 6799367    /usr/lib/libsfml-system.so.1
    41. b7fb7000-b7fb8000 rwxp 00002000 08:11 6799367    /usr/lib/libsfml-system.so.1
    42. b7fd0000-b7fd3000 rwxp b7fd0000 00:00 0 
    43. b7fd3000-b7fd4000 r-xp b7fd3000 00:00 0          [vdso]
    44. b7fd4000-b7fee000 r-xp 00000000 08:11 5603466    /lib/ld-2.7.so
    45. b7fee000-b7ff0000 rwxp 00019000 08:11 5603466    /lib/ld-2.7.so
    46. bfa71000-bfa86000 rw-p bffeb000 00:00 0          [stack]
    47. Abandon (core dumped)


    Voila a savoir je suis sur Ubuntu

    Merci de votre aide
    • Partager sur Facebook
    • Partager sur Twitter
      31 mars 2008 à 19:46:03

      ton code est juste (syntaxe), mais essaye plutot de faire une application local (127.0.0.1), avec un serveur et un client. car ici tu utilise comme serveur le sdz, avec le quel il faut "parler" HTTP. et le protocole HTTP marche avec TCP
      • Partager sur Facebook
      • Partager sur Twitter
        31 mars 2008 à 20:22:18

        Merci mais C pareil si je met 127.0.0.1
        • Partager sur Facebook
        • Partager sur Twitter
          31 mars 2008 à 20:27:09

          montre le code de ton serveur et de ton client stp
          • Partager sur Facebook
          • Partager sur Twitter
            31 mars 2008 à 20:39:30

            Voila pour le client
            1. #include <SFML/System.hpp>
            2. #include <SFML/Network.hpp>
            3. #include <iostream>
            4. #include <string>
            5. using namespace std;
            6. int main()
            7. {
            8.     // Ask for server address
            9.     sf::IPAddress ServerAddress("127.0.0.1");
            10.     // Create a UDP socket for communicating with server
            11.     sf::SocketUDP Client;
            12.     // Send a message to the server
            13.     char Message[] = "Hi, I'm a client !";
            14.     if (Client.Send(Message, sizeof(Message), ServerAddress, 4463) != sf::Socket::Done)
            15.     {
            16.         cout << "Erreur" <<endl;
            17.     }
            18.     std::cout << "Message sent to server : \"" << Message << "\"" << std::endl;
            19.     // Close the socket when we're done
            20.     Client.Close();
            21.     return 0;
            22. }


            et pour le serveur

            1. #include <SFML/Network.hpp>
            2. #include <iostream>
            3. #include <string>
            4. using namespace std;
            5. int main()
            6. {
            7. // Create a UDP socket for communicating with clients
            8.     sf::SocketUDP Server;
            9.     // Bind it to the specified port
            10.     if (!Server.Bind(4463))
            11.     {
            12.         cout << "Erreur" <<endl;
            13.     }
            14.     // Receive a message from anyone
            15.     sf::IPAddress ClientAddress;
            16.     char Message[128];
            17.     std::size_t Received;
            18.     if (Server.Receive(Message, sizeof(Message), Received, ClientAddress) != sf::Socket::Done)
            19.     {
            20.         cout << "Erreur" <<endl;
            21.     }
            22.     // Display it
            23.     std::cout << "Message received from " << ClientAddress << " : \"" << Message << "\"" << std::endl;
            24.     // Close the socket when we're done
            25.     Server.Close();
            26.     return 0;
            27. }


            Je crois que le problème viens de la lib qui doit etre mal installé mais je vois pas pourquoi
            • Partager sur Facebook
            • Partager sur Twitter
              31 mars 2008 à 20:58:39

              essaye de la reinsatller, ou d'utiliser la version statique
              • Partager sur Facebook
              • Partager sur Twitter
                31 mars 2008 à 21:24:21

                Finalement je ne pense que cela vienne de l'installation car les autre module tel que graphics window et system marche et ce n'est que pour l'envoie de socket que j'ai des problème
                • Partager sur Facebook
                • Partager sur Twitter
                  2 avril 2008 à 22:36:10

                  1. char Message[] = "Hi, I'm a client !";

                  Faudrait pas mettre le caractère de fin de chaîne pour délimiter le tableau?
                  Le message "*** stack smashing detected ***" me ferai pencher pour ce probleme. Il faudrait donc ajouter un "\0" à la fin de ton message.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 avril 2008 à 12:01:03

                    non, il s'ajoute tout seul
                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 avril 2008 à 17:04:42

                      Je vois vraiment pas d'ou viens le probleme personne pour m'aider??
                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 avril 2008 à 17:58:10

                        Vérifie que ton programme ET ton port ne sont pas bloqués pas le pare-feu
                        • Partager sur Facebook
                        • Partager sur Twitter
                          4 avril 2008 à 18:06:48

                          Ca ne peut pas venir de la puisque je teste en local sur 127.0.0.1 et sur un port superieur à 1024 donc le feu n'a rien a voir la dedans non?
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            4 avril 2008 à 18:45:00

                            Le part feu (et le NAT) gère aussi les ports supérieurs à 1024 (heureusement :-° )

                            Je te conseil de poster sur le forum officiel, tu trouveras plus d'aide je pense.

                            Tu as essayé le debuggeur?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              4 avril 2008 à 19:57:12

                              Le débbugeur du moins gdb ne me dit rien je ne pense que le firewall le bloque pas parce que avec la lib gnet ca marche
                              • Partager sur Facebook
                              • Partager sur Twitter
                                4 avril 2008 à 20:57:12

                                Chlab_lak a certainement raison.
                                Cela doit provenir de l'installation, les libs network ont peut être mal été installées ...
                                As-tu bien linker -lsfml-network et -lsfml-system ainsi que les libs de debug ?
                                Car j'ai testé ton code client en linkant et en compilant sous Codeblocks et tout marche ;)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  4 avril 2008 à 21:22:44

                                  Que veut tu dire par lib de débug??


                                  EDIT:
                                  C'est bon j(ai résolu ce probleme cela venait de la lib qui été mal installer maintenant j'ai un problème avec le serveur qui me dit

                                  ./HelloSFML: symbol lookup error: ./HelloSFML: undefined symbol: _ZN2sf9SocketTCP6AcceptERS0_PNS_9IPAddressE


                                  EDIT de l'EDIT:
                                  Problème résolu encore lib mal installé
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  [SFML] Probleme avec l'envoie de socket

                                  × 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