加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – boost :: asio :: placeholders :: bytes_transferred是什

发布时间:2020-12-16 09:35:33 所属栏目:百科 来源:网络整理
导读:async_read_until()中的boost :: asio :: placeholders :: bytes_transferred是什么意思?在回调函数中,它返回的值小于streambuf.size().在回调之前,streambuf很清楚.总而言之,… bytes_transferred不是通过套接字的实际字节数,而是更少.我是否误解了所有这
async_read_until()中的boost :: asio :: placeholders :: bytes_transferred是什么意思?在回调函数中,它返回的值小于streambuf.size().在回调之前,streambuf很清楚.总而言之,… bytes_transferred不是通过套接字的实际字节数,而是更少.我是否误解了所有这些,或者是什么?

编辑:我从套接字读取以下协议:

Y43,72,91009802000000603=0000000000000000000

“Y43,” – 是标题.
“Y” – 是消息类型.
“43” – 要读取的其他字节数
“,” – 分隔符.标题是直到第一个“,”遇到.

我的代码用于阅读就像:

void handle_write(const boost::system::error_code& error,size_t bytes_transferred)
{
    if (!error)
    {
        boost::asio::async_read_until(
            socket_,inputStreamBuffer_,',boost::bind(
                &client::handle_read1,this,boost::asio::placeholders::error,boost::asio::placeholders::bytes_transferred
            )
        );
    }
    else
    {
        std::cout << "Write failed: " << error << "n";
    }
}

void handle_read1(const boost::system::error_code& error,size_t bytes_transferred)
{
    cout << "bytes_transferred=" << bytes_transferred << endl;

    if (!error)
    {
        cout << "0 size=" << inputStreamBuffer_.size() << endl;
        istream is(&inputStreamBuffer_);
        char c[1000];
        is.read(c,bytes_transferred);
        c[bytes_transferred]=0;
        for (int i=0;i<bytes_transferred;++i)
        {
            cout << dec << "c[" << i << "]=" << c[i] << " hex=" << hex << static_cast<int>(c[i]) << "#" << endl;
        }
    }
    else
    {
        std::cout << "Read failed: " << error << "n";
    }
}

对于从另一方发送的流:

Y43,71,91009802000000595=0000000000000000000

有时候,我读到这个:

bytes_transferred=4
0 size=47
c[0]=Y hex=59#
c[1]=4 hex=34#
c[2]=3 hex=33#
c[3]=,hex=2c#

对于从另一方发送的流:

Y43,91009802000000603=0000000000000000000

但其他时候,我读到这个:

bytes_transferred=7
0 size=47
c[0]= hex=0#
c[1]= hex=0#
c[2]= hex=0#
c[3]= hex=0#
c[4]=7 hex=37#
c[5]=2 hex=32#
c[6]=,hex=2c#

套接字用SSL保护,客户端和服务器应用程序是boost_asio / example / ssl / *的略微修改的示例.

在第二个例子中,我松开整个标题:(

解决方法

函数有四个重载,但我们只假设使用了第一个.如果查看 documentation,那么您将看到bytes_transferred是指定的分隔符的字节数.

而且:

After a successful async_read_until operation,the streambuf may contain additional data beyond the delimiter. An application will typically leave that data in the streambuf for a subsequent async_read_until operation to examine.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读