Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [SFML 2.0 RC] Paquets corrompus ?  (Lu 4045 fois)

0 Membres et 1 Invité sur ce sujet

Odhexan

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
[SFML 2.0 RC] Paquets corrompus ?
« le: Septembre 23, 2012, 11:15:43 am »
Bonjour à tous ! :)

Tout d'abord, j'ai ce code:

#include <SFML/Network.hpp>
#include <iostream>


void treat(sf::UdpSocket *server)
{
        server->setBlocking(true);
        sf::IpAddress ip;
        sf::Uint16 port;
        sf::Packet mPacket;    
        server->receive(mPacket, ip, port);

        std::string str;
        mPacket >> str;

        std::cout << "Recevived from " << ip << ": " << str << std::endl;
}


int main()
{
        std::cout << "Connecting server..." << std::endl;
        sf::UdpSocket server, client;
        sf::IpAddress address;
        sf::Thread thread(&treat, &server);
        server.bind(5000);

        thread.launch();

        std::cout << "Enter address: ";
        std::cin >> address;

        sf::Packet packet;
        packet << std::string("Hello World !");
        client.send(packet, address, 5000);
}
 

qui me donne cette sortie:

Connecting server...
Enter address: 127.0.0.1
Recevived from 127.0.0.1: Hello World !
Appuyez sur une touche pour continuer...


Le problème, c'est que au moment de recevoir le message, j'ai le droit à une Message Box qui m'indique:

Run-Time Check Failure #2 - Stack around the variable 'mPacket' was corrupted.

De plus, en regardant le debugger, m_isValid des packets se trouve parfois à false ; et la read_pos se trouve à une nombre absolument immense, comme plus de 3 millions par exemple.

Donc j'ai beau eu chercher sur internet la signification du message, je n'ai rien trouvé. J'utilise Windows 7, SFML 2.0 RC et Visual Studio 2012.

Merci d'avance :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0 RC] Paquets corrompus ?
« Réponse #1 le: Septembre 23, 2012, 11:33:09 am »
Tu es sûr que tu n'utilises pas les bibliothèques Release en mode Debug (ou vice-versa), et que tu n'utilises pas un package de SFML pour une version différente de ton compilateur ?
Laurent Gomila - SFML developer

Odhexan

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : [SFML 2.0 RC] Paquets corrompus ?
« Réponse #2 le: Septembre 23, 2012, 11:36:36 am »
Oui, cette fois ci j'ai fais attention. Link des lib':

sfml-graphics-d.lib
sfml-audio-d.lib
sfml-network-d.lib
sfml-window-d.lib
sfml-system-d.lib

Projet en Debug Win32. Vu que la SFML n'est pas sortie pour Visual C++ 2012, que j'utilise, j'utilise la release de Visual C++ 2010. Et le reste marche, que ce soit les graphismes ou le son.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0 RC] Paquets corrompus ?
« Réponse #3 le: Septembre 23, 2012, 12:09:50 pm »
Citer
Vu que la SFML n'est pas sortie pour Visual C++ 2012, que j'utilise, j'utilise la release de Visual C++ 2010
Donc ce n'est pas la même version... ;)

Il faut que tu recompiles SFML.
Laurent Gomila - SFML developer

Odhexan

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : [SFML 2.0 RC] Paquets corrompus ?
« Réponse #4 le: Septembre 23, 2012, 12:42:26 pm »
Hmmm, je pensais que vu que le reste marchait alors, pourquoi pas le réseau... Je test et je te tiens au courant ! :)

Edit: Non malheureusement même après avoir compilé, j'ai toujours la même erreur !
J'ai mis une image en pièce jointe pour montrer ce que le paquet donne lors du debug. C'est exactement le même code que dans le premier post.

A noter que si je met le sf::Packet en variable globale, l'erreur disparait.

[attachment deleted by admin]
« Modifié: Septembre 23, 2012, 01:25:07 pm par Odhexan »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0 RC] Paquets corrompus ?
« Réponse #5 le: Septembre 26, 2012, 02:44:41 pm »
Tu es certain de bien avoir recompilé, dans la bonne configuration, et que tu utilises bien les nouveaux fichiers .lib et .dll ?

Bon, sinon tu dis que ça plante au moment de recevoir, mais au niveau de la sortie on voit bien que le programme s'exécute correctement jusqu'au bout : la chaîne reçue est correcte, et tu as bien le "Appuyez sur une touche pour continuer..." qui signifie que le programme s'est terminé proprement. Donc je ne vois pas où se situe le crash là-dedans en fait. Tu peux nous montrer la pile d'appels du debugger ?
Laurent Gomila - SFML developer

Odhexan

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : [SFML 2.0 RC] Paquets corrompus ?
« Réponse #6 le: Septembre 27, 2012, 09:56:29 pm »
Oui, je suis sûr de bien utiliser les lib' compilés.
En pièce jointe, c'est donc le screen de la pile, et du message d'erreur. J'ai essayer quelque chose, c'est de mettre la variable PingPacket et de la déclarer en static. Ca a complètement fait disparaitre l'erreur. A la limite, je pourrais m'en contenter, ça ne surcharge pas la lecture du code, mais c'est tout de même étrange !
Oui le programme à l'air de s'être arrêter proprement, mais dans le thread principal, car le programme est multi-threadé.

[attachment deleted by admin]

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0 RC] Paquets corrompus ?
« Réponse #7 le: Septembre 27, 2012, 10:22:25 pm »
Mais ça ce n'est pas le code minimal que tu as posté :(

Si on bosse ici sur un code qui n'est pas le code réel, on n'arrivera à rien.
Laurent Gomila - SFML developer

Odhexan

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : [SFML 2.0 RC] Paquets corrompus ?
« Réponse #8 le: Septembre 27, 2012, 10:35:33 pm »
Effectivement, j'avais un peu améliorer. Désolé d'avoir mis le mauvais projet.

Donc voici le code du projet de test:
#include <SFML/Network.hpp>
#include <iostream>
#include <list>
#include <string>

class Info
{
public:
        Info(sf::IpAddress ip, sf::Uint16 port, std::string pseudo)
        {
                mIp = ip;
                mPort = port;
                mPseudo = pseudo;
        }
        sf::IpAddress mIp;
        sf::Uint16 mPort;
        std::string mPseudo;
};


std::list<Info> ip_list;
sf::Packet packet;

void treat(sf::UdpSocket *server)
{
        sf::Packet mPacket;    
        server->setBlocking(true);
        sf::IpAddress ip;
        sf::Uint16 port;
        server->receive(mPacket, ip, port);

        std::string str, pseudo;
        mPacket >> str >> pseudo;

        ip_list.push_back(Info(ip, port, pseudo));

        std::cout << "Recevived from " << ip << ": " << str << std::endl;

        for (Info &i : ip_list)
                std::cout << "Client: " << i.mIp << ":" << i.mPort << " -> " << i.mPseudo << std::endl;
}


int main()
{
        std::cout << "Connecting server..." << std::endl;
        sf::UdpSocket server, client;
        sf::IpAddress address;
        sf::Thread thread(&treat, &server);
        server.bind(5000);

        thread.launch();

        std::cout << "Enter address: ";
        std::cin >> address;

        packet << std::string("Hello World !") << std::string("Odhexan");
        client.send(packet, address, 5000);

        thread.wait();
}

J'ai donc remis la pile du debug, et le message d'erreur. Donc si la variable est static ou globale, l'erreur disparait.

[attachment deleted by admin]

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0 RC] Paquets corrompus ?
« Réponse #9 le: Septembre 27, 2012, 10:45:41 pm »
Tu as changé des options CMake quand tu as recompilé SFML ?
Laurent Gomila - SFML developer

Odhexan

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : [SFML 2.0 RC] Paquets corrompus ?
« Réponse #10 le: Septembre 27, 2012, 11:02:13 pm »
Non, j'ai lancé CMake en utilisant le générateur pour Visual C++ 2012, toutes les options était laissé par défaut.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0 RC] Paquets corrompus ?
« Réponse #11 le: Septembre 28, 2012, 08:15:37 am »
Peux-tu essayer le code d'exemple donné dans le tutoriel VC++, ou celui de la page d'accueil de la documentation (i.e. un truc qui utilise sfml-graphics) ?
« Modifié: Septembre 29, 2012, 06:09:09 pm par Laurent »
Laurent Gomila - SFML developer

Odhexan

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : [SFML 2.0 RC] Paquets corrompus ?
« Réponse #12 le: Septembre 29, 2012, 04:15:00 pm »
J'ai fait en sorte qu'on puisse tout voir sur l'image. Mais ça ne me l'avait pas fait, mais quand je quitte le programme, message d'erreur pour 'window', le même que pour les Packets.

[attachment deleted by admin]

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0 RC] Paquets corrompus ?
« Réponse #13 le: Septembre 29, 2012, 06:11:50 pm »
Ok, donc c'est bien ta configuration qui est moisie, rien à voir avec le code.

On a déjà vérifié la majorité de ces trucs mais je les résume tout de même :
- il faut strictement la même version du compilo
- il faut les mêmes options de CRT (si tu n'as rien touché aux options CMake et aux options de ton projet, c'est bon)
- il ne faut pas mixer debug et release

Il y a forcément l'un de ces trucs qui est incorrect chez toi (à moins que j'en ai oublié).
Laurent Gomila - SFML developer