我正在尝试使用Boost Asio创建HTTP客户端。我从asio复制了同步客户端示例,编译然后运行。不幸的是,在我的日志中,它显示找不到服务。当我跟踪代码时,我发现它是从以下代码抛出的:
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;
有人可以解释为什么没有找到服务或者我该如何解决这个问题?
答案 0 :(得分:9)
这意味着操作系统不知道哪个端口号对应名称为“http”的TCP服务。
在类似unix的操作系统上,这意味着http 80/tcp
中缺少行/etc/services
,我可以通过评论该行来重现Linux上的错误。
如果操作系统无法配置为使用服务,您可以使用解析程序中的任何服务""
,并在为connect调用创建端点对象时明确指定端口号:
tcp::endpoint connectionEndpoint(endpoint_iterator->address(), 80);
boost::system::error_code ec;
socket.connect(connectionEndpoint, ec);