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 :

udp::resolver resolver.resolve initialisation ?


Sujet :

Boost C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Points : 23
    Points
    23
    Par défaut udp::resolver resolver.resolve initialisation ?
    Bonjour,

    https://www.boost.org/doc/libs/1_77_...cho_client.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    int main(int argc, char* argv[])
    {
      try
      {
        if (argc != 3)
        {
          std::cerr << "Usage: blocking_udp_echo_client <host> <port>\n";
          return 1;
        }
     
        boost::asio::io_context io_context;
     
        udp::socket s(io_context, udp::endpoint(udp::v4(), 0));
     
        udp::resolver resolver(io_context);
        udp::resolver::results_type endpoints =
          resolver.resolve(udp::v4(), argv[1], argv[2]);
    J'essaie de modifier ce code pour ne pas à avoir à entrer deux argument pour executer l'application (ex: c:\ app 127.0.0.1 3333) mais je ne comprends pas les arguments dont a besoin "resolver.resolve(..." pour être initialiser. Après modification, endpoints s'en retrouve mal initialisé aussi et ça ne compile plus.

    Après recherche, apparement resolver.resolve serait "deprecated" mais je ne sais pas trop par quoi le remplacer.
    Quelqu'un peut m'aider?


    Merci.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 170
    Points : 12 291
    Points
    12 291
    Par défaut
    Ca marche pas ce truc ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    udp::resolver::results_type endpoints = resolver.resolve(udp::v4(), "127.0.0.1", "3333");
    Attention aux quotes.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Points : 23
    Points
    23
    Par défaut
    ben si ça fonctionne après avoir supprimé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (argc != 3)
            {
                std::cerr << "Usage: blocking_udp_echo_client <host> <port>\n";
                return 1;
            }
    Bah j'ai rien compris alors lol.
    J'avais essayé plusieurs fois mais je changais aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    udp::socket s(io_context, udp::endpoint(udp::v4(), 0));
    en remplaçant udp::v4(),0 aussi avec ip_address et port_num car c'est comme ça que j'initialise le endpoint coté server.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    std::string raw_ip_address = "127.0.0.1";
        unsigned short port_num = 3333;
        boost::asio::ip::address ip_address =
            boost::asio::ip::address::from_string(raw_ip_address);
     
    ...
     
    MFserver(boost::asio::io_context& io_context, short port)
            : socket_(io_context, udp::endpoint(ip_address, port_num))

    Bref... merci bien, je peux continuer au moins.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 170
    Points : 12 291
    Points
    12 291
    Par défaut
    Citation Envoyé par noals Voir le message
    ben si ça fonctionne après avoir supprimé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (argc != 3)
            {
                std::cerr << "Usage: blocking_udp_echo_client <host> <port>\n";
                return 1;
            }
    Bah j'ai rien compris alors lol.
    Normal, "argc" donne le nombre d'argument en ligne de commande.
    Si vous lancer "c:\ app", argc est égale à 1.
    argv[0] = "app"

    Si vous lancer "c:\ app 127.0.0.1 3333", argc est égale à 3.
    argv[0] = "app"
    argv[1] = "127.0.0.1"
    argv[2] = "3333"

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 053
    Points
    33 053
    Billets dans le blog
    4
    Par défaut
    Et si au lieu de copier du code sans réfléchir et en supprimer au petit bonheur tu le lisais le code en question ?
    C'est on ne peut plus clair que tu le lances mal et il te dit comment le faire bien.
    Usage: blocking_udp_echo_client <host> <port>\n

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Points : 23
    Points
    23
    Par défaut
    De ce que j'ai compris, j'initialisais mon "endpoint" avec le socket
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    udp::socket s(io_context, udp::endpoint(udp::v4(), 0));
    seulement pour le serveur, je change ces valeurs, et donc naturellement, j'avais utiliser la même méthode avec le client, à savoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    udp::socket s(io_context, udp::endpoint("127.0.0.1, 3333));
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    udp::socket s(io_context, udp::endpoint(ip_address, port_num));
    C'est à dire que l'initialisation de mon socket comme je le fais pour le serveur ne compilait plus le code après avoir modifié de la même façon, en plus, l'initialisation du "resolver" et donc non, je n'ai pas compris pourquoi car maintenant, le code compile avec mon resolver mais les argument du socket son ceux "par defaut".

    En gros ce que j'comprends là, c'est que ce code initialise le socket avec des valeurs par defaut sans se connecter et donc le resolver défini le type de resultat que le socket doit attendre avec en bonus les infos de connection.

    j'imagine que la méthode peut donc être utilisé pour "listen" d'autre type de "result" sur un autre port par exemple mais le fait que le socket soit initialisé avec le port 0 m'a troublé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/10/2004, 18h29
  2. [Java2D] "The Import java2d cannot be resolved" ?
    Par jmhC dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 08/08/2004, 15h52
  3. [setParameter]cannot resolve symbole
    Par DEC dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 07/07/2004, 20h15
  4. Réponses: 4
    Dernier message: 19/03/2004, 11h48
  5. TNS:listener could not resolve SERVICE_NAME given in connect
    Par Sinclair dans le forum Administration
    Réponses: 15
    Dernier message: 20/08/2003, 17h26

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