Forum de la communauté SFML

Aide => Réseau => Discussion démarrée par: DipStax le Août 22, 2019, 07:32:45 pm

Titre: [Résolu] Valeur multiplié dans un packet
Posté par: DipStax le Août 22, 2019, 07:32:45 pm
Bonjour,
J'utilise le systéme TCP de SFML et quand j'envoie un packet constitué:

/* Serveur: */
stuff stuff_;
packet << stuff_;
// puis un envoie tout ce qu'il a de plus conventionnel

// operateur:
sf::packet& operator<<(stuff& stuff_, sf::Packet& packet) {
   packet << stuff.getID() << stuff_.getName() << static_cast<int>(stuff_.getTypeObj())
             << stuff_.getMaxSlot() << static_cast<int>(stuff_.getPiece()) << stuff_.getMinLvl()
             << stuff_.getStat() << stuff_.getNbEnchant();
}
 

A partir de "static_cast<int>(stuff_.getPiece())", toute les valeurs sont multipliés par 65536.
Et la valeur de "stuff_.getNbEnchant()" est illisible.

/* Client: */
packet >> stuff;

// operateur:
sf::packet& operator>>(stuff& stuff_, sf::Packet& packet) {
  std::string name;
  int ID, typeObj, maxSlot, piece, minLvl, stat, nbEnchant;
  packet >> ID >> name >> typeObj >> maxSlot >> piece >> minLvl >> stat;
  if (!(packet >> nbEnchant))
        std::cout << "Fail: extract nbEnchant" << std::endl;
  std:: cout << ID << ":" << name << ":" << typeObj << ":" << maxSlot << ":" << piece << ":"
                 << minLvl << ":" << stat << ":" << nbEnchant << std::endl;
}
 

Ce qui me donne quand j'envoie des valeurs:

IDNameTypeObjmaxSlotpieceminLvlstatnbEnchant
1"none"123784envoie
1"none"12196608458752524288"Fail: extract nbEnchant"reception

Merci d'avance.
Titre: Re: Valeur multiplié dans un packet
Posté par: Laurent le Août 23, 2019, 06:37:40 am
Le type int n'est pas approprié, comme indiqué dans le tutoriel il faut utiliser des types à taille fixe pour ne pas avoir de différences entre plateformes. Et éventuellement réduire la taille des données (ici tu pourrais utiliser uint8_t par exemple).

Essaye déjà ça et vois si ça change quelque chose.
Titre: Problème résolut!
Posté par: DipStax le Août 23, 2019, 09:23:31 pm
Merci, c'était bien les tailles variables de "int" qui posé probléme.