`T capire veramente quali sono i parametri per la costruzione di tcp :: :: resolver interrogazione

StackOverflow https://stackoverflow.com/questions/551226

  •  23-08-2019
  •  | 
  •  

Domanda

Sto iniziando Boost.Asio e cercando di fare esempi riportati sul lavoro sito ufficiale.
Qui `s codice client:


using boost::asio::ip::tcp;

int _tmain(int argc, _TCHAR* argv[])
{
    try {
        boost::asio::io_service io_service;

        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);

        for(;;) {
            boost::array buf;
            boost::system::error_code error;

            std::size_t len = socket.read_some(boost::asio::buffer(buf), error);

            if (error == boost::asio::error::eof)
                break; //connection closed cleanly by peer
            else if (error)
                throw boost::system::system_error(error);

            std::cout.write(buf.data(), len);
        }
    }
    catch(std::exception& e) {
        //...
    }
    return 0;
}

La domanda è - non riesco a scoprire quali sono i parametri sarebbe quello di eseguire il programma da riga di comando

?
È stato utile?

Soluzione

Si potrebbe eseguire il programma con l'IP o il nome host del server che si desidera connettersi. tcp :: :: resolver query richiede l'host per risolvere o l'IP come primo parametro e il nome del servizio (come definito ad esempio in / etc / services su host Unix) - si possono anche utilizzare un identificativo numerico di servizio (aka porto numero). Esso restituisce un elenco di possibili punti finali, in quanto vi possono essere diverse voci per un singolo host.

Altri suggerimenti

leggere vecchio manuale!

ip::tcp::resolver resolver(my_io_service);
ip::tcp::resolver::query query("www.boost.org", "http");
ip::tcp::resolver::iterator iter = resolver.resolve(query);
ip::tcp::resolver::iterator end; // End marker.
while (iter != end)
{
    ip::tcp::endpoint endpoint = *iter++;
    std::cout << endpoint << std::endl;
}

http: // www. boost.org/doc/libs/1_38_0/doc/html/boost_asio/overview/networking/protocols.html

Ho avuto lo stesso problema in questo momento (con la stessa tutorial). Modificare il codice del server a:

tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 19876));

e modificare il codice del client:

tcp::resolver::query query(argv[1], "19876");

per fare lo stesso lavoro di servizio su una porta diversa.

Se non erro, si sta tentando di utilizzare stringa UNICODE - TCHAR. Utilizza standard

int main(int argc,char **argv)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top