0

ブースト 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 バイトを取得して「マジック」変数に移動する代わりに、ストリームを解析して有効な文字列化された数値を取得しようとします。これはもちろん失敗し、失敗ビットが設定されます。

4

1 に答える 1