Boost - ASIO与IOStreams TCP

时间:2012-05-31 21:04:37

标签: c++ boost tcp boost-asio iostream

我是Boost的新手。我正在为sokcets / networking / TCP的东西寻找一个简单的跨平台解决方案,并找到了Boost。快速浏览显示似乎有两个 TCP相关类:一个在 Iostreams ,一个在 Asio
我(非常)确定如果我深入研究两个库的相应文档,我将能够找出每个库的使用,但是有人可以简单地解释一下它们的区别是什么,或者每个库的用途是什么?

3 个答案:

答案 0 :(得分:5)

Boost.Iostreams中是否有TCP流?

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:3)

正如其他人所说,Boost.Asio可能就是你想要的。它是一个优雅的跨平台包装器,用于系统特定的网络设备。它提供了诸如套接字,IP地址,定时器等构建块。

但它也为简单的网络交互提供了高级别iostream interface。这是一个simple example

#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;
}