`T capire veramente quali sono i parametri per la costruzione di tcp :: :: resolver interrogazione
-
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
?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)