Forum de la communauté SFML

Aide => Réseau => Discussion démarrée par: Rodd le Août 26, 2012, 05:31:52 pm

Titre: [SFML2] Connexion NotReady (Résolu)
Posté par: Rodd le Août 26, 2012, 05:31:52 pm
Bonjour à tous, je débute sfml dans le réseau mais je ne suis pas tombé sur un bug bloquant. Plutôt une mauvaise utilisation faut croire..

Voilà le problème. J'ai crée un serveur et un client, deux programmes différent. La connexion fonctionne mais uniquement sur le réseau local.

//Client
std::cout<<"Connecting ... ";
sf::Socket::Status soso = client.connect(address, 33033);
if(soso == sf::Socket::Done){
    std::cout<<"Done";}
else if(soso == sf::Socket::AnyPort){
    std::cout<<"Anyport";}
else if(soso == sf::Socket::Disconnected){
    std::cout<<"Disconnected";}
else if(soso == sf::Socket::Error){
    std::cout<<"Error";}
else if(soso == sf::Socket::NotReady){
    std::cout<<"NotReady";}
else{
    std::cout<<"WTF?";}
 

Lorsque je rentre mon IP internet à la place d'address, rien ne se passe. Mais lorsque je tape "127.0.0.1", la connexion se fait, et donc je peux envoyer des données et en recevoir sans aucun problème mais lors de la connexion ce n'est pas "Done" qu'il s'écrit mais bien "NotReady".

Donc:


Comment se fait-il ? Merci de votre explication. :)
Titre: Re : [SFML2] Connexion NotReady
Posté par: Rodd le Août 26, 2012, 05:44:37 pm
Je précise que je suis en non-bloquant =)
Titre: Re : [SFML2] Connexion NotReady
Posté par: Laurent le Août 26, 2012, 05:45:07 pm
Il faut configurer ton routeur et/ou ton pare-feu pour qu'il laisse passer la connexion.

Et connect ne fonctionne pas toujours en mode non-bloquant, fais ça après la connexion.
Titre: Re : [SFML2] Connexion NotReady
Posté par: Rodd le Août 26, 2012, 06:05:29 pm
http://img51.imageshack.us/img51/47/62424894.png

Pourtant il me semblait avoir bien ouvert mon port. Il faut un certain délai ou un reboot du routeur pour que ca soit effectif ?

Qu'entendez-vous par après ? Je refais une même connexion par après ?
Titre: Re : [SFML2] Connexion NotReady
Posté par: Laurent le Août 26, 2012, 06:56:27 pm
Citer
Pourtant il me semblait avoir bien ouvert mon port.
Ca n'a pas l'air. Moi j'irai plutôt voir dans "Firewall".

Citer
Qu'entendez-vous par après ? Je refais une même connexion par après ?
Non, tu passes en mode non-bloquant après la connexion. Puisque connect ne marche pas bien en mode non-bloquant.
Titre: Re : [SFML2] Connexion NotReady
Posté par: Rodd le Septembre 06, 2012, 08:19:46 pm
Merci beaucoup, ça marche super maintenant !

J'ai une dernière petite question avant de clôturer le sujet comme résolu..
Lorsqu'on essaye de mettre en place un serveur Udpsocket, on doit supprimer/recréer un nouveau Udpsocket après chaque donnée reçue ? Ou on peut utiliser le même socket lié au port à chaque tour de boucle ? :)

Merci !
Titre: Re : [SFML2] Connexion NotReady
Posté par: Laurent le Septembre 06, 2012, 08:49:38 pm
Pourquoi faudrait-il le recréer à chaque fois ? C'est pas des sockets jetables ;)
Titre: Re : [SFML2] Connexion NotReady
Posté par: Rodd le Septembre 06, 2012, 09:12:36 pm
Effectivement je viens de revérifier mon code de test et c'est une erreur de ma part.

Un grand merci pour ton aide =)
Titre: Re : Re : [SFML2] Connexion NotReady
Posté par: kamui le Septembre 26, 2012, 02:21:18 pm
Pourquoi faudrait-il le recréer à chaque fois ? C'est pas des sockets jetables ;)

il a pas de machine à laver.........[-]

Bon sinon bonjour tout le monde,

je préfère poster là plutôt que de recréer un topic (et ça me fait un bon prétexte pour poster ma blague miteuse ;D) car je penses que cela a un rapport.

voilà je suis en train de faire un client/serveur basique et tout fonctionne bien, mais j'ai à mon avis mal compris certaines notions car je suis obligé d'appeler plusieurs fois la méthode connect de mon listener côté server pour qu'il arrive à se mettre en place :

j'obtiens en console :

impossible de se connecter a ce port
Failed to bind listener socket to port 50001
en attente d'une connexion client...
 

le premier message est de moi et s'affiche si l'appel à connect() a échoué, la deuxieme c'est SFML qui génère ce message je penses, et le troisième c'est encore moi pour quand tout est OK.

Un petit bout de code :

bool Server::waitForConnection()
{
    if (!socket_trouduc_serveur->listen(port))
    {
        std::cerr << "impossible de se connecter a ce port" << std::endl;
        return false;
    }
    else
    {
        std::cerr << "en attente d'une connexion client..." << std::endl;
        return true;
    }
}
 

et dans mon main je suis obligé de faire :
while (!s.waitForConnection());
 

Une idée de ce que je n'ai pas compris ?
Titre: Re : [SFML2] Connexion NotReady (Résolu)
Posté par: Laurent le Septembre 26, 2012, 02:52:23 pm
Il faut juste que tu lises attentivement la documentation des fonctions que tu utilises ;)

Ensuite fais gaffe à ce que tu dis, tu n'arrêtes pas de mélanger "connect" et "listen", j'avais rien compris avant de lire ton code à la fin.
Titre: Re : [SFML2] Connexion NotReady (Résolu)
Posté par: kamui le Septembre 26, 2012, 03:06:27 pm
ah ouio pardon, c'est listen (j'écris rapidement parce que je suis au boulot donc je fais/dis des conneries)

Mais ok je vais regarder la doc alors, ton non étonnement m'en dit déjà long^^

merki ;)