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