Não posso realmente entender o que os parâmetros para a construção de tcp :: resolver :: consulta

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

  •  23-08-2019
  •  | 
  •  

Pergunta

Estou começando Boost.Asio e tentando fazer exemplos dados no trabalho site oficial.
Here `s código de cliente:


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

A questão é -? Eu não posso descobrir o que os parâmetros seria para executar o programa de prompt de comando

Foi útil?

Solução

Você poderia executar o programa com o IP ou o nome do servidor que você deseja se conectar. tcp :: resolver :: consulta leva o anfitrião para resolver ou o IP como o primeiro parâmetro eo nome do serviço (como definido por exemplo em / etc / serviços em hosts Unix) - você também pode usar um identificador de serviço numérico (aka porta número). Ele retorna uma lista de possíveis desfechos, como pode haver várias entradas para um único host.

Outras dicas

leia o manual de idade!

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

Eu tive o mesmo problema agora (com o mesmo tutorial). Alterar o código do servidor para:

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

e altere o código do cliente:

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

para fazer o mesmo trabalho de serviço em uma porta diferente.

Se não me engano, você está tentando usar Unicode string - TCHAR. Use padrão

int main(int argc,char **argv)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top