7

我正在尝试使用 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;

任何人都可以解释为什么它找不到服务或我该如何解决这个问题?

4

1 回答 1

11

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

在类似 unix 的操作系统上,这意味着该行http 80/tcp从 中丢失/etc/services,我可以通过注释掉该行来重现 Linux 上的错误。

如果操作系统无法配置为使用服务,您可以使用""解析器中的任何服务,并在为连接调用创建端点对象时明确指定端口号:

tcp::endpoint connectionEndpoint(endpoint_iterator->address(), 80);
boost::system::error_code ec;
socket.connect(connectionEndpoint, ec);
于 2011-07-11T15:44:23.313 回答