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

Auteur Sujet: TcpSocket détecté comme "Disconnected" alors que non  (Lu 1996 fois)

0 Membres et 1 Invité sur ce sujet

DexArio

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
TcpSocket détecté comme "Disconnected" alors que non
« le: Mai 04, 2014, 09:19:37 pm »
Bonjour,

Je suis entrain de faire un mini jeu en réseau avec une architecture Client/Serveur. Voici mon code, côté serveur:

int main()
{
        int nbClients;

        sf::TcpListener listener;
        sf::TcpSocket c1, c2;

        sf::Packet p, p2;

        short port = 1601;

        listener.listen(port);

reload:

        std::cout << "Server launched on port " << port << ", waiting for connections..." << std::endl;

        listener.accept(c1);
        std::cout << "A client has connected, sending a packet to him..." << std::endl;
        p << "Succesfully connected" << "wait";
        c1.send(p);
        p.clear();

        listener.accept(c2);
        std::cout << "A client has connected, sending a packet to him..." << std::endl;
        p << "Succesfully connected" << "launch";
        c2.send(p);
        p.clear();
        p << "launch";
        c1.send(p);
        p.clear();

        while (true)
        {
                if (c1.Disconnected && !c2.Disconnected)
                {
                        p << "shut";
                        c2.send(p);
                        c2.disconnect();
                        p.clear();

                        std::cout << "A client has disconnected, reloading server..." << std::endl;
                        goto reload;
                }
                if (c2.Disconnected && !c1.Disconnected)
                {
                        p << "shut";
                        c1.send(p);
                        c1.disconnect();
                        p.clear();

                        std::cout << "A client has disconnected, reloading server..." << std::endl;
                        goto reload;
                }
                if (c1.Disconnected && c2.Disconnected)
                {
                        c1.disconnect();
                        c2.disconnect();

                        std::cout << "Clients have disconnected, reloading server..." << std::endl;
                        goto reload;
                }

                c1.receive(p);
                c2.receive(p2);

                std::cout << "Data Received, sending it..." << std::endl;

                c1.send(p2);
                c2.send(p);
               
        p.clear();
        p2.clear();
        }

        return 0;
}
 

Le problème est que dès que le thread entre dans la while loop, il entre directement dans "if (c1.Disconnected && c2.Disconnected)" et ressort de la loop, alors que les deux clients ne se sont pas déconnectés. Par contre, j'ai remarqué que une fois connecté au serveur, windows affiche que le client ne répond pas alors qu'il répond parfaitement (le jeu marche). Si vous voulez du code côté client, dites le moi.
« Modifié: Mai 04, 2014, 09:41:00 pm par DexArio »

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Socket détecté comme "Disconnected" alors que non
« Réponse #1 le: Mai 04, 2014, 09:45:57 pm »
Oula attention.
Quand tu tapes c1.Disconnected ça ne veut rien dire tout seul.
sf::Socket::Status est un enum, et Disconnected fait parti de cet enum. Tu récupères le status d'une socket quand tu effectues une action (send / receive / conect) et tu compares ce status aux valeurs l'enum sf::Socket::Status pour voir si tout s'est bien passé ou pas, donc sf::Socket::Disconnected si tu veux voir si y'a eu déconnexion.

T'as lu le tutoriel sur les sockets ?
Tu peux aussi jeter un oeil à la doc avant de poster, on comprend tout de suite que c1.Disconnected tout seul n'a pas de sens. T'as sorti ça grâce à l'auto-completion de ton IDE sans savoir ce que c'est ?  :o ???
« Modifié: Mai 04, 2014, 09:52:14 pm par G. »

 

anything