Boostは初めてです。私はsokcets/network / TCPのもののための簡単なクロスプラットフォームソリューションを探していて、Boostを見つけました。簡単に見ると、TCP関連のクラスが2つあるようです。1つはIostreamsにあり、もう1つはAsioにあります。
両方のライブラリのそれぞれのドキュメントを掘り下げると、それぞれの使用法を理解できると(かなり)確信していますが、誰かが違いが何であるか、またはそれぞれが何のために使用されているかを簡単に説明できますか?
3 に答える
Is there a TCP stream in Boost.Iostreams?
ASIO is a complete full-featured networking library supporting asynchronous I/O using a generic callback API. The ip::tcp::iostream
class (which is part of ASIO) is built on top of ASIO, hiding much of the complexity of creating and managing a socket manually and providing a standard iostream interface.
Boost IOStreamsを使用して、std::stream互換のストリームオブジェクトを簡単に作成しました。それらを使用してTCPストリームクラスを作成できますが、TCPをサポートするためのすべての作業を行います。IOStreamsは、ストリームクラスを作成するためのフレームワークを提供するだけです。
また、BoostAsioを使用してスタンドアロンTCPサーバーを作成しました。過去にWindowsソケットを使用して同じようなことをしたことがあるので、Asioを使用するとTCPサーバー(およびクライアント)の作成が非常に簡単になります。Asioはあなたが望むものだと思います。
他の人が言っているように、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;
}