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

Auteur Sujet: Message d'envoi  (Lu 2373 fois)

0 Membres et 1 Invité sur ce sujet

Cmdu76

  • Full Member
  • ***
  • Messages: 194
    • Voir le profil
Message d'envoi
« le: Juin 01, 2013, 12:01:21 am »
Bonjour,

J'avais créer ce topic, résolu le problème, mais finalement un nouveau est apparu :

Quand j'envoit des strings en UDP côté client, le serveur les capte mal,
Exemple j'envoit : azerty
Le serveur recoit : azerxu
Il n'affiche que les 4 premières lettres et remplace le reste par xu...

Voici mon code envoit client et reception serveur :

Client :
std::getline(std::cin, msg); //msg est de type std::string
if (socket.send(msg.c_str(), sizeof(msg.c_str()), server, port) != sf::Socket::Done)
    return;
std::cout << "Client :" << msg << std::endl;
 

Serveur :
if (socket.receive(in, sizeof(in), received, sender, senderPort) != sf::Socket::Done) //in est le char in[] de l'exemple
    return;
std::cout << "Client :" << in << std::endl;

Je pense que le pb vient du fait du string/char[], mais je suis pas sur....
« Modifié: Juin 01, 2013, 01:40:35 am par Cmdu76 »

Cmdu76

  • Full Member
  • ***
  • Messages: 194
    • Voir le profil
Re : Message d'envoi
« Réponse #1 le: Juin 01, 2013, 01:36:52 am »
Aussi, serait-il possible d'avoir une boucle d'exemple d'un jeu en réseau ?

Ce que j'aimerais savoir c'est comment intégrer ça dans un "jeu" ?

while(window.isOpen())
{
    while(window.pollEvent(event))
    {
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
        {
            sprite.move(0, -1);
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
        {
            sprite.move(1, 0);
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
        {
            sprite.move(0, 1);
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
        {
            sprite.move(-1, 0);
        }
        window.clear();
        window.draw(sprite);
        window.display();
    }
}

En gros ici c'est une boucle "classique" de jeu offline, où je rajoute mes fonctions de réseau ?
Je rajoute une condition if(socket.send(....)) dans ma boucle ou autres ... ?
Et je dois update les autres joueurs donc j'ajoute un if(socket.receive(...)) ?

Merci d'avance pour ces deux petites réponses :)
« Modifié: Juin 01, 2013, 01:39:15 am par Cmdu76 »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Message d'envoi
« Réponse #2 le: Juin 01, 2013, 09:18:57 am »
Ne mélange pas les questions qui n'ont rien à voir, tout ce que tu vas obtenir c'est une discussion qui n'a ni queue ni tête.

Citer
sizeof(msg.c_str())
== 4, puisque tu demandes la taille d'un pointeur.
msg.size() par contre te donnera vraiment le nombre de caractères de la chaîne.

Citer
En gros ici c'est une boucle "classique" de jeu offline
Je dirais plutôt que c'est l'exemple typique d'une boucle incorrecte ;)
Commence par lire les tutoriels, il y a plein d'exemples de bonne boucle de jeu ainsi que des explications sur pourquoi la tienne est si mauvaise.

Ensuite pour le réseau, il y a tellement de manières différentes de faire que c'est compliqué. Mais tu peux aussi trouver des indications à la fin du tutoriel sur les sockets.
Laurent Gomila - SFML developer

Cmdu76

  • Full Member
  • ***
  • Messages: 194
    • Voir le profil
Re : Message d'envoi
« Réponse #3 le: Juin 02, 2013, 06:29:27 pm »
Okay merci beaucoup :)