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 :

Boost Asio construction


Sujet :

Boost C++

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 72
    Par défaut Boost Asio construction
    Salut à tous

    Je souhaite utiliser dans mon appli la bibliothèque Asio de Boost. J'ai commencé par faire une version "procédurale". Cela fonctionne même si je n'ai pas tout compris

    Je voudrais structurer mon programme pour le rendre "objet".
    J'ai déclaré une classe avec les membres privés ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private:
    	bsa::io_service& mailbox_io_service;
    	bsa::ip::tcp::socket mailbox_socket;
     
    	bsa::streambuf response;
    	std::istream response_stream;
     
    	bsa::streambuf request;					
    	std::ostream request_stream;
     
    	string receive_line;
    et dans le constructeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    mailbox::mailbox(bsa::io_service& service){
    	mailbox_io_service = service;
    	mailbox_socket.service = mailbox_io_service;
     
    	response_stream.init = &response;
    	request_stream.init = &request;
    }

    Seulement VC++ 2008 Express Edition me génère les erreurs suivantes:

    1>d:\developpement\c++\monprojet\mailbox.hpp(25) : error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'receive_line'
    1>d:\developpement\c++\monprojet\mailbox.hpp(25) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    1>d:\developpement\c++\monprojet\mailbox.hpp(25) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    1>d:\developpement\c++\monprojet\main.cpp(10) : error C2512: 'mailbox'*: aucun constructeur par défaut approprié disponible



    J'avoue être perdu. Qu'est ce qui ne va pas ?

    D'avance merci
    Cordialement

  2. #2
    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,

    C'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::string receive_line;
    MAT.

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 72
    Par défaut
    Salut Mat,

    Merci.

    Maintenant VC++ me dit:
    error C2758: 'mailbox::mailbox_io_service'*: doit être initialisé(e) dans la liste des initialiseurs base/membre du constructeur

    Qu'est ce ça veut dire ?


    Question subsidiaire:
    Dans un exemple de Boost (http://www.boost.org/doc/libs/1_37_0...connection.cpp), que signifie la notation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    connection::connection(boost::asio::io_service& io_service,
        connection_manager& manager, request_handler& handler)
      : socket_(io_service),
        connection_manager_(manager),
        request_handler_(handler)
    En fait c'est surtout ':' qui m'intrigue.

    Bonne journée

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est une référence, elle ne peut être initialisée qu'à l'initialisation, donc dans la liste d'initialisation (http://cpp.developpez.com/faq/cpp/?p...EUR_liste_init)

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 72
    Par défaut
    Salut Matthieu

    Merci pour le lien Je vais étudier ça.

    Autre question:
    Est ce que tu peux (ou quelqu'un d'autre) m'expliquer ce que fait exactement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    tcp::resolver resolver(io_service);
    tcp::resolver::query query(argv[1], "daytime")
    tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
    tcp::resolver::iterator end;
    tcp::socket socket(io_service);
    boost::system::error_code error = boost::asio::error::host_not_found;
        while (error && endpoint_iterator != end)
        {
          socket.close();
          socket.connect(*endpoint_iterator++, error);
        }
        if (error)
          throw boost::system::system_error(error);
    C'est surtout le "coté" itération que je ne comprends pas bien.

    Merci
    Cordialement

  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
    Il effectue une requête pour se connecter à un certain service qui est à un certain hôte.
    Cette requête lui renvoie un certain nombre de "serveurs potentiels". Il itère sur ce certain nombre jusqu'à réussir à se connecter. S'il ne parvient à se connecter sur aucun, alors il lance une exception.

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 72
    Par défaut
    Je ne comprends pas très bien.

    Dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tcp::resolver::query query("@", "protocol")
    on spécifie l'adresse et le protocole.
    Donc normalement, on se connecte sur un serveur avec un port spécifique (Ex: www.monserveurweb.fr sous-entendu port 80, protocole HTTP).
    Qu'apporte cette itération par rapport à la commande classique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(sock, (SOCKADDR *)&sin, sizeof(sin))
    ?

    D'avance merci

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est une meilleure encapsulation des bibliothèques systèmes, c'est tout. En C++, on écrira la première solution, pas la deuxième qui est du C.

Discussions similaires

  1. Boost::Asio et Visual C++ Express 2005
    Par TocTocKiéLà? dans le forum Boost
    Réponses: 11
    Dernier message: 30/12/2007, 21h11
  2. socket ssl & boost::asio
    Par kass28 dans le forum Boost
    Réponses: 0
    Dernier message: 16/10/2007, 09h38
  3. Boost::Asio et code::blocks
    Par TocTocKiéLà? dans le forum Boost
    Réponses: 10
    Dernier message: 10/08/2007, 23h20
  4. Boost::asio et openssl
    Par Floréal dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 18/07/2007, 16h17
  5. Boost::asio : multi threading ou pas?
    Par Alp dans le forum Boost
    Réponses: 9
    Dernier message: 02/09/2006, 22h01

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