Não posso realmente entender o que os parâmetros para a construção de tcp :: resolver :: consulta
-
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
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)