2011-07-11 91 views
5

我正在尝试使用Boost Asio创建一个HTTP客户端。我从asio复制同步客户端示例,编译然后运行。不幸的是,在我的日志中,它显示服务未找到。当我跟踪的代码,我发现它正从下面的代码抛出:Boost Asio tcp :: resolver:未找到服务

boost::asio::io_service io_service; 
// Get a list of endpoints corresponding to the server name. 
tcp::resolver resolver(io_service); 
//->if i removed the http, it has no error 
tcp::resolver::query query("host.com", "http"); 
//->This part throws the service not found 
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); 
tcp::resolver::iterator end; 

任何人都可以解释为什么它是扔未找到或服务,我怎么能解决这个问题?

回答

6

这意味着操作系统不知道哪个端口号对应于名称为“http”的TCP服务。

在一个类Unix操作系统上,这意味着行从/etc/services丢失,我能够通过评论该行重现错误在Linux上。

tcp::endpoint connectionEndpoint(endpoint_iterator->address(), 80); 
boost::system::error_code ec; 
socket.connect(connectionEndpoint, ec); 
+0

感谢您的答复:

如果操作系统不能被配置为使用的服务,您可以在解析器对连接调用创建端点对象时,使用任何服务"",并明确指定端口号。当我重新开始工作时会试试这个。谢谢。 – neztreh

+2

您也可以将端口号作为一个字符串,例如查询(“host.com”,“80”) –

相关问题