NO.1

ASIO 读操作大总结:

A. Boos::asio::read 同步读方式

void client::read_data(char   * sourse  , int num )

{

  boost::asio::read( socket_own , boost::asio::buffer( sourse , num ) );

}

Buffer 可以换成 boost::streambuf

如:

boost::asio::streambuf response ;

boost::asio::read (socket, response );

而 streambuf 是能过自动扩充的 。

B. boost::asio::read_until 同步方式读, 但是读到特定的字符串后结束

例子;

boost::asio::streambuf response;

boost::asio::read_until(socket, response, "\r\n");

C: boost::asio::read_at 是在读的时候加上一个偏移量( I  thin k  )但是我用在socket的读写上没有成功, 可能用在其他device 上,  好吧,先不用你 。

俩个函数 ,

示例如下:

boost::array<char,

boost::asio::transfer_all(), ec);

if (ec)

{

// An error occurred.

}

else

{

// n == 128

}

同理:boost::array<char, 128> buf;

boost::system::error_code ec;

std::size_t n = boost::asio::read(

sock, boost::asio::buffer(buf),

boost::asio::transfer_at_least(64), ec);

if (ec)

{

// An error occurred.

}

else

{

// n >= 64 && n <= 128

}

其实以上就是实现了socket。Read_some 的作用 。

---------------------------------------------------------------------------------

D.重量出击 socke 成员函数 读操作

Socket. Receive ( boost::asio::buffer( buff ) );

利用receive的好处之一就是它既可以代替read 函数,同时还可以在后边加一个flag 参数 , 设置socket 的属性。

E: 更好使的是 socket.read_some ( boost::asio::buffer( buff ) ) ;

这个函数的神奇之处在于, 你在buffer中设置了比较大的缓冲区,这没有问题 , 它并不一定会把缓冲区填满才完成,而是读到eof 即完成操作,这样我们可以不必在关心server到底会发多少size_t 给client,我们 只管设置一个较大缓冲区, read_some 就知道读多少。它返回 std::size_t.

F: 以上介绍的都是同步方式操作的,下面是相对应的异步读操作。

如下是 boost::asio 命名空间下:

boost::bind( & client::handle_read ,this ,  boost::asio::placeholders::error , boost::asio::placeholders::bytes_transferred );boost::asio::async_read( socket_own , boost::asio::buffer ( data_copy ) ,

);

相对应的socket 的成员函数 异步操作如下:

void handler(示例如下:

const boost::system::error_code& error, // Result of operation.

std::size_t bytes_transferred           // Number of bytes read.

);

socket.async_read_some(boost::asio::buffer(data, size), handler);

很好的是, async_read_some 能够知道读多少数据, 所以我们的size可以尽可能的大一点,而 receive 的话可以保证读固定大小数据。

---------------------------------------------------------------------------------------

第二部分 写

ASIO 读操作大总结:

A. Boos::asio::write 同步写方式

void client::write_data(char   * sourse  , int num )

{

boost::asio::write( socket_own , boost::asio::buffer( sourse , num ) );

}

Buffer 可以换成 boost::streambuf

boost--asio--读写大总结的更多相关文章

  1. boost asio异步读写网络聊天程序client 实例具体解释

    boost官方文档中聊天程序实例解说 数据包格式chat_message.hpp <pre name="code" class="cpp">< ...

  2. boost asio异步读写网络聊天程序客户端 实例详解

    boost官方文档中聊天程序实例讲解 数据包格式chat_message.hpp <pre name="code" class="cpp">< ...

  3. boost asio tcp 多线程异步读写,服务器与客户端。

    // server.cpp #if 0 多个线程对同一个io_service 对象处理 用到第三方库:log4cplus, google::protobuf 用到C++11的特性,Windows 需要 ...

  4. boost::asio 的同、异步方式

    转自:http://blog.csdn.net/zhuky/archive/2010/03/10/5364574.aspx Boost.Asio是一个跨平台的网络及底层IO的C++编程库,它使用现代C ...

  5. boost::asio 使用 libcurl

    curl 使用 asio 的官方样例 http://curl.haxx.se/libcurl/c/asiohiper.html, 但这个例子用起来有很明细的 bug,asio 异步IO 只注册一次,也 ...

  6. Boost.Asio c++ 网络编程翻译(14)

    保持活动 假如,你须要做以下的操作: io_service service; ip::tcp::socket sock(service); char buff[512]; ... read(sock, ...

  7. 使用Boost.Asio编写通信程序

    摘要:本文通过形像而活泼的语言简单地介绍了Boost::asio库的使用,作为asio的一个入门介绍是非常合适的,可以给人一种新鲜的感觉,同时也能让体验到asio的主要内容. Boost.Asio是一 ...

  8. Boost.Asio的使用技巧

    基本概念 Asio proactor I/O服务 work类 run() vs poll() stop() post() vs dispatch() buffer类 缓冲区管理 I/O对象 socke ...

  9. Boost.Asio 网络编程([译]Boost.Asio基本原理)

    转自:https://m.w3cschool.cn/nlzbw/nlzbw-3vs825ya.html Boost.Asio基本原理 这一章涵盖了使用Boost.Asio时必须知道的一些事情.我们也将 ...

  10. boost.asio源码剖析(三) ---- 流程分析

    * 常见流程分析之一(Tcp异步连接) 我们用一个简单的demo分析Tcp异步连接的流程: #include <iostream> #include <boost/asio.hpp& ...

随机推荐

  1. Tensorflow做阅读理解与完形填空

    catalogue . 前言 . 使用的数据集 . 数据预处理 . 训练 . 测试模型运行结果: 进行实际完形填空 0. 前言 开始写这篇文章的时候是晚上12点,突然想到几点新的理解,赶紧记下来.我们 ...

  2. GitHub for Windows客户端使用操作流程

    Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理.作为一个程序员,我们需要掌握其用法. 作为开源代码库以及版本控制系统,Github目前拥有140 ...

  3. Kafka权威指南 读书笔记之(四)Kafka 消费者一一从 Kafka读取数据

    KafkaConsumer概念 消费者和消费者群组 Kafka 消费者从属于消费者群组.一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息. 往群组里增加消费者是横向伸缩消费能力 ...

  4. 一个awk if 嵌套 if 的脚本

    [root@makeISO sjx]# cat sex.sh #!/bin/bash # 统计如下内容,并输出结果 # (男职工未婚数量/男员工整体数量)(女员工未婚数量/女员工整体数量) echo ...

  5. SSH框架的搭建和测试(Spring + Struts2 + Hibernate)

    SSH框架实现了视图.控制器.和模型的彻底分离,同时还实现了业务逻辑层与持久层的分离. Spring实现了MVC中的 Controller的功能,Struts实现Web视图的功能,Hibernate则 ...

  6. CSS样式选择

    1:#a,b{…………}一个id叫a和一个标签是b的样式 2:#a b{…………}一个id叫a下面的一个标签是b的样式3:#a:b{…………}一个id叫a的伪类b的样式4:#a.b{…………}一个id ...

  7. url 组成部分

    NSURL其实就是我们在浏览器上看到的网站地址,这不就是一个字符串么,为什么还要在写一个NSURL呢,主要是因为网站地址的字符串都比较复杂,包括很多请求参数,这样在请求过程中需要解析出来每个部门,所以 ...

  8. Coursera, Deep Learning 1, Neural Networks and Deep Learning - week4, Deep Neural Networks

    Deep Neural Network Getting your matrix dimention right 选hyper-pamameter 完全是凭经验 补充阅读: cost 函数的计算公式: ...

  9. bind,unbind,one

    刚开始我们先看一下它的定义: .bind( eventType [, eventData], handler(eventObject)) .Bind()方法的主要功能是在向它绑定的对象上面提供一些事件 ...

  10. 【CentOS】Tomcat的安装

    文件上传方式(推荐) # 解压 tar zxvf apache-tomcat-9.0.1.tar.gz # 进入bin目录启动 ./startup.sh # 进入log目录查看日志信息 tail -f ...