2012-05-31 97 views
2

我是Boost的新手。我正在为sokcets/networking/TCP等寻找一个简单的跨平台解决方案,并发现了Boost。快速窥视显示似乎有两个 TCP相关类:一个在Iostreams和一个在Asio
我很确定,如果我深入了解两个库的相应文档,我将能够弄清楚每个库的使用情况,但是有人可以简单地解释它们之间的区别,或者每个库的用途是什么?Boost - ASIO与IOStreams TCP

回答

4

Boost.Iostreams中是否有TCP流?

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

3

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

我也用Boost Asio来创建一个独立的TCP服务器。过去曾经使用Windows套接字来做同样的事情,我可以告诉你,Asio使写TCP服务器(和客户端)变得非常简单。我认为阿西欧是你想要的。

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