2009-02-15 102 views
15

我正在启动Boost.Asio并尝试在官方网站上提供示例工作。
here`s客户端代码:无法真正了解构建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; 
} 

的问题是 - 我无法找出参数是从命令提示符下运行的程序是什么?

回答

12

你会运行与要连接到服务器的IP或主机名的程序。 tcp :: resolver :: query将主机解析或将IP作为第一个参数和服务的名称(例如,在Unix主机上的/ etc/services中定义) - 您也可以使用数字服务标识符(又名端口数)。它返回可能的端点列表,因为单个主机可能有多个条目。

+1

TCP ::解析器::查询查询( “本地主机”, “白天”); //它的工作原理 //我想测试localhost上的例子 – chester89 2009-02-15 17:56:39

1

如果我没有错,你试图使用UNICODE字符串 - tchar。使用标准

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

我现在有同样的问题(使用相同的教程)。更改服务器代码:

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

和更改客户端代码:

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

做出不同端口上同一服务工作。

相关问题