2009-02-15 10 views
15

Zaczynam Boost.Asio i próbuję zrobić przykłady podane na oficjalnej stronie pracy.
here`s kod klienta:Naprawdę nie rozumiem, jakie parametry do konstruowania tcp :: resolver :: query


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

Pytanie brzmi - nie mogę dowiedzieć się, jakie parametry byłoby uruchomić program z wiersza poleceń?

Odpowiedz

12

by uruchomić program z IP lub nazwę hosta serwera, który chcesz połączyć. tcp :: resolver :: query pobiera host do rozstrzygnięcia lub IP jako pierwszy parametr i nazwę usługi (jak zdefiniowano np. w/etc/services na hostach Uniksa) - możesz również użyć numerycznego identyfikatora usługi (zwanego również portem numer). Zwraca listę możliwych punktów końcowych, ponieważ może być kilka wpisów dla pojedynczego hosta.

+1

query tcp :: rezolwer :: query ("localhost", "dzień"); // działa // Chciałem przetestować przykład na localhost – chester89

1

Jeśli się nie mylę, próbujesz użyć ciągu UNICODE - tchar. Użyj standardowy

int main(int argc,char **argv) 
2

Miałem ten sam problem w tej chwili (z tym samym samouczkiem). Zmień kod serwera do:

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

i zmienić kod klienta:

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

aby tę samą pracę usług na innym porcie.

Powiązane problemy