IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Boost C++ Discussion :

Asio tutorial 1 et 2


Sujet :

Boost C++

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 120
    Par défaut Asio tutorial 1 et 2
    Bonjour

    En quête d'une librairie réseau gratuite pour faire des jeux multiplayers, je me suis orienté vers Boost::Asio. Je ne sais pas trop si c'est une bonne idée mais je n'ai trouvé que celle-ci qui soit en cours de dév et qui présente pas mal de fonctionnalité (voire même trop pour un petit jeu).
    Que pensez-vous de ce choix ?

    Seulement quand je lance le tutorial sur les fonctions asynchrones TCP j'ai une erreur dans le client : Hôte inconnu

    J'ai passé en premier paramètre de la ligne de commande l'adresse IP locale du server 127.0.0.1 peut-être que l'erreur vient de là. J'ai essayé de passer le numéro du port (13) , même erreur.

    Pourriez-vous m'aider s'il vous plaît ? merci d'avance.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 190
    Par défaut
    Salut,

    Sans code, difficile de t'aider.

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 120
    Par défaut
    Un simple copier-coller des 2 tutos sur les sockets :

    http://www.boost.org/doc/libs/1_36_0...tdaytime1.html

    http://www.boost.org/doc/libs/1_36_0...tdaytime2.html

    dans 2 projets différents , bien sûr :-)

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Ben si tu essaies de te connecter à un serveur qui n'existe pas, forcément, ça ne risque pas de marcher.
    Il faut lancer le serveur avant le client.

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 120
    Par défaut
    Evidemment je lance le serveur avant.

    En fait je ne comprends pas la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tcp::resolver::query query(argv[1], "daytime");

  6. #6
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Ton choix est bon, à mon avis. C'est une bibliothèque C++ assez performante, écrite en C++ moderne (i.e usage des templates, etc) et qui a une grosse communauté derrière, dont une partie est ici

    Quand à ton problème, vérifie bien que le serveur tourne sur le bon port, et amuse toi à vérifier que le serveur va bien en utilisant telnet...
    Si t'es sous windows :
    Démarrer > Exécuter : cmd.exe
    telnet
    open 127.0.0.1 13
    Et si le serveur est ok tu devrais recevoir la date et le jour.
    Si non, cherche pas dans le code car il est correct, je l'ai testé de nombreuses fois, comme l'ont fait des milliers d'autres gens

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    daytime est un service que la résolution devrait associer au port 13.

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Un problème de firewall peut-être ?

    MAT.

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 120
    Par défaut
    Je ne comprends rien à Asio .

    J'ai cherché du côté firewall. J'ai fermé mon antivirus.

    Pour tester l'ouverture de la du port en local, j'ai suivi les conseils de Alp. Et la console me répond :
    Impossible d'ouvrir une connection à l'hôte, sur le port 13
    J'ai testé différent port car il me semble que certains premiers ports sont réservés. Toujours la même réponse.

    L'année dernière je me suis "amusé" (disons plus testé) avec RakNet.
    J'ai interfacé Director de Adobe avec la DLL de Raknet. Ce qui pour le test a poussé vers la création d'un petit chat : téléchargeable ici

    Celui fonctionne ? Les 2 exes clients se connectent sur le port 20000 du serveur avec chacun un port définit. Et peuvent dialoguer entre eux.

    EasyPhp marche très bien aussi.

    Apprenti en programmation réseau (encor plus avec boost) je me demande bien ce qu'il se passe.

    Ton choix est bon, à mon avis. C'est une bibliothèque C++ assez performante, écrite en C++ moderne (i.e usage des templates, etc) et qui a une grosse communauté derrière, dont une partie est ici
    Merci pour le conseil, j'ai envie de foncer. Merci à Kayyham aussi pour son excellent tuto d'architecture des jeux qui m'a fait découvrir Asio.

    Sauf que pour l'instant ca tourne pas !!!!

    Le serveur "s'échappe" pendant la fonction (le processus ne passe pas à la ligne suivante, thread bloquant ?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    acceptor.accept(socket);
    à la première itération.

    Côté client, la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tcp::resolver::query query(argv[1], "daytime");
    génère directement l'erreur d'hôte inconnu.

    Quel code simple "en dur" peut permettre de tester simplement les sockets avec boost::asio ?

    Quelle perte de temps

  10. #10
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Essaye de te connecter sur le port 80 à l'hôte google.fr, ça ira mieux

  11. #11
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 120
    Par défaut
    En fait je n'avais pas lancé le serveur. telnet se connecte bien , est affiché la date lol

    Par contre le client du tutorial ne connecte pas .
    j'ai essayé query("127.0.0.1", "daytime") et le client affiche
    Aucune connection n'a pu être étblie car l"ordinateur l'a expressement refuse
    On progresse. Savez-vous ce que veut dire ce message ?

  12. #12
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Quand tu le fais avec telnet c'est bon, mais pas avec le code du client donné dans la doc ?

    Entre temps, tu n'as rien fait qui aurait pu bloquer le client asio ?
    Genre redémarrer l'ordi, ce qui éventuellement aurait relancé un firewall d'un certain Antivirus parano ?

  13. #13
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 120
    Par défaut
    Quand tu le fais avec telnet c'est bon, mais pas avec le code du client donné dans la doc ?
    Oui exactement.

    Entre temps, tu n'as rien fait qui aurait pu bloquer le client asio ?
    Genre redémarrer l'ordi, ce qui éventuellement aurait relancé un firewall d'un certain Antivirus parano ?
    Non.

    Toutefois le code du client s'éxécute plus longtemps. Il passe le querry. C'est à la première boucle de la connection qu'il trouve une error :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    socket.connect(*endpoint_iterator++, error);
    error 10061 (citée plus haut).

    Enigmatique non ?

  14. #14
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 120
    Par défaut
    Il suffisait de le savoir !o! Pour le client définir l'adresse et le port simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tcp::resolver::query query("127.0.0.1", "13000");
    Je ne comprends pas pourquoi dans la doc il ne préfère pas cette ligne de code. C'est quand même plus simple que l'argument "127.0.0.1" et "daytime".

    En avant l'aventure ...

  15. #15
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 190
    Par défaut
    Citation Envoyé par MABB Voir le message
    Il suffisait de le savoir !o! Pour le client définir l'adresse et le port simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tcp::resolver::query query("127.0.0.1", "13000");
    Je ne comprends pas pourquoi dans la doc il ne préfère pas cette ligne de code. C'est quand même plus simple que l'argument "127.0.0.1" et "daytime".

    En avant l'aventure ...
    Dans ce cas l'utilisation de query ne sert pas à grand chose... Autant construire directement ton endpoint :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tcp::endpoint endpoint(ip::address::from_string("127.0.0.1"), 13000);
    socket.connect(endpoint);

Discussions similaires

  1. ASIO: tutorials, exemples, erreurs
    Par alceste dans le forum C++
    Réponses: 5
    Dernier message: 15/11/2006, 18h25
  2. Question sur le Tutorial d'instalation de TDLPortIO...
    Par G-DiE dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/02/2004, 08h08
  3. où y a t il un tutorial pour le Treeview ??
    Par silvermoon dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/12/2002, 13h30
  4. Tutorial 3DSMAX
    Par tastalian dans le forum OpenGL
    Réponses: 2
    Dernier message: 13/10/2002, 17h27
  5. Réponses: 2
    Dernier message: 11/08/2002, 21h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo