Boost C++ 库

……是世界上备受推崇且设计精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, 《C++ Coding Standards》

套接字流 - Boost C++ 函数库
PrevUpHomeNext

Boost.Asio 包含在套接字之上实现 iostreams 的类。这些类隐藏了与端点解析、协议无关性等相关的复杂性。要创建一个连接,可以简单地这样写:

ip::tcp::iostream stream("www.boost.org", "http");
if (!stream)
{
  // Can't connect.
}

iostream 类也可以与 acceptor 结合使用来创建简单的服务器。例如:

io_context ioc;

ip::tcp::endpoint endpoint(tcp::v4(), 80);
ip::tcp::acceptor acceptor(ios, endpoint);

for (;;)
{
  ip::tcp::iostream stream;
  acceptor.accept(stream.socket());
  ...
}

可以通过调用 expires_at()expires_from_now() 来设置超时,以建立一个截止日期。任何超出截止日期的套接字操作都会将 iostream 置于“bad”状态。

例如,一个简单的客户端程序像这样:

ip::tcp::iostream stream;
stream.expires_from_now(boost::posix_time::seconds(60));
stream.connect("www.boost.org", "http");
stream << "GET /LICENSE_1_0.txt HTTP/1.0\r\n";
stream << "Host: www.boost.org\r\n";
stream << "Accept: */*\r\n";
stream << "Connection: close\r\n\r\n";
stream.flush();
std::cout << stream.rdbuf();

如果所有套接字操作加起来花费的时间超过 60 秒,则会失败。

如果发生错误,可以使用 iostream 的 error() 成员函数来检索最近一次系统调用的错误代码。

if (!stream)
{
  std::cout << "Error: " << stream.error().message() << "\n";
}
参见

ip::tcp::iostream, basic_socket_iostream, iostreams 示例

注释

这些 iostream 模板只支持 char,不支持 wchar_t,并且不执行任何代码转换。


PrevUpHomeNext