2009-02-15 2 views
15

Ich bin Boost.Asio starten und versuchen, Beispiele auf der offiziellen Website zur Verfügung gestellt zu machen.
Hier `s Client-Code:Kann nicht wirklich verstehen, was die Parameter für den Aufbau von 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; 
} 

Die Frage ist - ich kann nicht herausfinden, was die Parameter Programm von Eingabeaufforderung auszuführen wären?

Antwort

12

Sie würden das Programm mit der IP-Adresse oder Hostname des Servers führen Sie eine Verbindung herstellen möchten. tcp :: resolver :: query nimmt den Host zum Auflösen oder die IP als ersten Parameter und den Namen des Dienstes (wie zB in/etc/services auf Unix-Hosts definiert) - Sie können auch eine numerische Service-ID (auch als Port bezeichnet) verwenden Nummer). Es gibt eine Liste möglicher Endpunkte zurück, da möglicherweise mehrere Einträge für einen einzelnen Host vorhanden sind.

+1

tcp :: Resolver :: Abfrage Abfrage ("localhost", "tagsüber"); // es funktioniert // Ich wollte das Beispiel auf localhost testen – chester89

1

Wenn ich nicht irre, versuchen Sie UNICODE string - tchar zu verwenden. Verwenden Sie Standard

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

Ich hatte das gleiche Problem im Moment (mit dem gleichen Tutorial). Ändern Sie den Servercode:

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

und den Client-Code ändern:

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

die gleichen Servicearbeiten an einem anderen Port zu machen.

Verwandte Themen