2

我是 Boost 的新手。我一直在为 sokcets/networking/TCP 东西寻找一个简单的跨平台解决方案,然后找到了 Boost。快速浏览一下,似乎有两个与 TCP 相关的类:一个在Iostreams中,一个在Asio中。
我(非常)确定如果我深入研究两个库的各自文档,我将能够弄清楚每个库的用途,但是有人可以简要解释一下区别是什么,或者每个库的用途是什么?

4

3 回答 3

5

Boost.Iostreams 中有 TCP 流吗?

ASIO 是一个完整的全功能网络库,使用通用回调 API 支持异步 I/O。该类ip::tcp::iostream(作为 ASIO 的一部分)构建在 ASIO 之上,隐藏了手动创建和管理套接字并提供标准 iostream 接口的大部分复杂性。

于 2012-05-31T22:15:22.670 回答
4

我使用 Boost IOStreams 轻松创建与 std::stream 兼容的流对象。您可以使用它们来创建 TCP 流类,但您将完成所有工作以支持 TCP。IOStreams 只是提供了一个框架来创建流类。

我还使用 Boost Asio 创建了一个独立的 TCP 服务器。过去使用 Windows 套接字来做同样的事情,我可以告诉你,Asio 使编写 TCP 服务器(和客户端)变得非常容易。我认为 Asio 是你想要的。

于 2012-05-31T22:42:45.730 回答
3

正如其他人所说,Boost.Asio可能是您想要的。它是系统特定网络内容的优雅且跨平台的包装器。它提供了诸如套接字、IP 地址、计时器等构建块。

但它也为简单的网络交互提供了高级iostream 接口。这是一个简单的例子

#include <iostream>
#include <string>
#include <boost/asio.hpp>

using boost::asio::ip::tcp;

int main(int argc, char* argv[])
{
  try
  {
    if (argc != 2)
    {
      std::cerr << "Usage: daytime_client <host>" << std::endl;
      return 1;
    }

    tcp::iostream s(argv[1], "daytime");
    if (!s)
    {
      std::cout << "Unable to connect: " << s.error().message() << std::endl;
      return 1;
    }

    std::string line;
    std::getline(s, line);
    std::cout << line << std::endl;
  }
  catch (std::exception& e)
  {
    std::cout << "Exception: " << e.what() << std::endl;
  }

  return 0;
}
于 2012-06-03T05:29:21.850 回答