ブースト ASIO の iostream クラスを使用して、TCP ソケットからバイナリ データを読み取ろうとしています。標準の抽出演算子 (operator>>) を使用して、ストリームからデータを読み取ります。私が使用している環境は Visual Studio 2010 です。問題は、ストリームを読み取ると、ストリームがバイナリ データを文字列として解析しようとしているように見えることです。少なくともこれは、コードをデバッグしたときに見たものです。
iostream を使用して、文字列ストリームではなくバイナリ ストリームとして読み取る方法はありますか?
boost::asio::io_service dataServer;
boost::asio::ip::tcp::endpoint dataServerEndpoint(boost::asio::ip::tcp::v4(), dataServerPort);
boost::asio::ip::tcp::acceptor acceptor(dataServer, dataServerEndpoint);
boost::asio::ip::tcp::iostream dataServerStream;
acceptor.accept(*dataServerStream.rdbuf());
try
{
vector<char> lineBuffer;
while (!dataServerStream.eof())
{
bool eof = dataServerStream.eof();
bool bad = dataServerStream.bad();
bool fail = dataServerStream.fail();
bool good = dataServerStream.good();
uint64_t magic;
dataServerStream >> magic;
そのため、ストリームから 8 バイトを取得して「マジック」変数に移動する代わりに、ストリームを解析して有効な文字列化された数値を取得しようとします。これはもちろん失敗し、失敗ビットが設定されます。