Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - NoIdea

Pages: [1]
1
Réseau / Signal socket disconnected ?
« le: Mai 20, 2012, 11:27:03 am »
Bonjour à tous.
J'ai quelques problèmes avec le module réseau de la SFML.
Aujourd'hui, voici le code serveur simplifié utilisé :

while(!finished)
    {
        unsigned NbSockets=Selector.Wait();
        for (unsigned i = 0; i < NbSockets; ++i)
        {
            sf::SocketTCP Socket = Selector.GetSocketReady(i);
            if(Socket==Listener)
            {
                sf::IPAddress Address;
                sf::SocketTCP Client;
                Listener.Accept(Client,&Address);
                Selector.Add(Client);
                //Envoie des données au client
            }
            else
            {
                sf::Packet info;
                if(Socket.Receive(info)!=sf::Socket::Done) //On vérifie que le socket a bien reçu quelque chose.
                    break;
                //On traite
            }
        }
        sf::Sleep(0.1);
    }

Voici mes questions : Comment faire, sans envoyer d'informations régulières pour vérifié si le client est toujours connecté ? (Si je dois envoyer des informations régulière, je dois multithreadé mon programme client, chose faisable, mais en dernier recours).

En gros ce que je voudrais pouvoir faire :

itération sur tous les sockets dans le selector
    -si le socket n'a rien reçu de nouveau, on passe au prochain
    -si le socket est déconnecté, je traite cette information
    -si le socket a reçu quelque chose de nouveau :
         -si c'est le listener, je rajoute la nouvelle connexion et je traite l'information.
         -sinon, je traite l'information reçue.

Comment faire ceci facilement avec le module réseau de la sfml ? Dois-je me tourner vers une autre bibliothèque réseau ?

[EDIT] Il semblerait (d'après ce que je viens de lire sur le forum anglais) que je sois obligé de multithreadé mon programme client et de vérifier régulièrement s'il est toujours connecté. Serait-il possible de mettre une fonction GetStatus dans sf::Socket qui nous indique s'il est déconnecté ou non ? (cela est peut-être déjà fait dans SFML2).[/EDIT]

Y a t-il une autre bibliothèque réseau qui pourrait répondre à mes besoins beaucoup plus simplement ?
Merci à tous.

Pages: [1]