设为首页 - 加入收藏 - 网站地图 欢迎加QQ群 :14364084
当前位置:谭博的博客 > 编程语言 > c > 正文

【Boost】boost库asio详解7——boost::asio::buffer用法

时间:2014-06-27 15:23 来源:未知 标签:boost::asio::buffer 作者:谭博 阅读:

1. asio::buffer常用的构造方法

asio::buffer有多种的构造方法,而且buffer大小是自动管理的

1.1 字符数组

 
  1. char d1[128];  
  2. size_t bytes_transferred = socket.receive(boost::asio::buffer(d1));  

1.2 字符向量

 
  1. std::vector<char> d2(128);  
  2. size_t bytes_transferred = socket.receive(boost::asio::buffer(d2));  

1.3 boost的数组

 
  1. boost::array<char, 128> d3;  
  2. size_t bytes_transferred = sock.receive(boost::asio::buffer(d3));   

1.4 字符串

 
  1. string str = "hello world";  
  2. bytes_transferred = socket.send(boost::asio::buffer(str));   

2. asio::buffer的常用方法

2.1 转换方法

 
  1. boost::asio::mutable_buffer b1 =boost::asio::buffer(str);  
  2. unsigned char* p1 = boost::asio::buffer_cast<unsigned char*>(b1);  

2.2 获取大小

 
  1. std::size_t s1 = boost::asio::buffer_size(b1);  

3. asio::buffer的读写问题

注意的是boost::asio::const_buffer是只读的buffer, 而boost::asio::mutable_buffer则可写。
读写buffer也是有讲究的 

3.1 与transfer_all()结合

 
  1. boost::array<char, 128> buf;  
  2. boost::system::error_code ec;  
  3. std::size_t n = boost::asio::read(  
  4.     socket,  
  5.     boost::asio::buffer(buf),  
  6.     boost::asio::transfer_all(),  
  7.     ec);  
  8. if (ec)  
  9. {  
  10.   // An error occurred.  
  11. }  
  12. else  
  13. {  
  14.   // n == 128  
  15. }  

boost::asio::transfer_all()能够使buffer中的所有数据都传送完毕。即读满buffer为止。

3.2 与transfer_at_least()结合

 
  1. std::size_t n = boost::asio::read(  
  2.     socket,  
  3.     boost::asio::buffer(buf),  
  4.     boost::asio::transfer_at_least(64),  
  5.     ec);  

意义即读满64字节为止。返回。
当然还有最常用的bytes_transferred,这个例子就很多了。 

 

关注微信公众号

微信扫一扫,打赏我

热评文章
    内容不错,支持一下
    评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)