Boost.Asio c++ 网络编程翻译(26)
Boost.Asio-其他特性
- boost::asio::buffer():这样的buffer关联着一个Boost.Asio的操作(我们使用的buffer被传递给一个Boost.Asio的操作)
 - boost::asio::streambuf:这个buffer继承自std::streambuf,在网络编程中能够喝STL stream一起使用
 
size_t read_complete(boost::system::error_code, size_t bytes){ ... }
char buff[1024];
read(sock, buffer(buff), read_complete);
write(sock, buffer("echo\n"));
streambuf buf;
read(sock, buf);
streambuf buf;
read_until(sock, buf, "\n");
streambuf buf;
std::ostream out(&buf);
out << "echo" << std::endl;
write(sock, buf);
struct person {
       std::string first_name, last_name;
       int age;
};
std::ostream& operator<<(std::ostream & out, const person & p) {
return out << p.first_name << " " << p.last_name << " " << p.age;
}
std::istream& operator>>(std::istream & in, person & p) {
return in >> p.first_name >> p.last_name >> p.age;
}
streambuf buf;
std::ostream out(&buf);
person p;
// … 初始化p
out << p << std::endl;
write(sock, buf);
read_until(sock, buf, "\n");
std::istream in(&buf);
person p;
in >> p;
- 当通过网络写入一些要发送的东西时。非常有可能你会有多个片段的数据。所以,你须要把数据加入到一个buffer里面。假设那个数据不是一个字符串,你须要先把它转换成一个字符串。
当使用<<操作符时这些操作默认都已经做了
 - 相同。在另外一个部分,当读取一个消息时,你须要解析它,也就是说。读取到一个片段的数据时,假设这个数据不是字符串,你须要将它转换为字符串。当你使用>>操作符读取一些东西时这些也是默认就做了的
 
streambuf buf;
...
std::cout << &buf << std::endl; // 把全部内容输出到console中
std::string to_string(streambuf &buf) {
std::ostringstream out;
out << &buf;
return out.str();
}
Boost.Asio c++ 网络编程翻译(26)的更多相关文章
- Boost.Asio c++ 网络编程翻译(20)
		
异步服务端 这个图表是相当复杂的:从Boost.Asio出来你能够看到4个箭头指向on_accept.on_read,on_write和on_check_ping. 着也就意味着你永远不知道哪个异步调 ...
 - Boost.Asio c++ 网络编程翻译(14)
		
保持活动 假如,你须要做以下的操作: io_service service; ip::tcp::socket sock(service); char buff[512]; ... read(sock, ...
 - Boost.Asio c++ 网络编程翻译(11)
		
*_at方法 这些方法在一个流上面做随机存取操作.你来指定read和write操作从什么地方開始(offset): async_read_at(stream, offset, buffer [, co ...
 - Boost.Asio c++ 网络编程翻译(21)
		
同步VS异步 Boost.Asio的作者做了一个非常惊艳的工作:它能够让你在同步和异步中自由选择,从而更好的适应你的应用. 在之前的章节中,我们学习了每种类型应用的框架,比方同步client,同步服务 ...
 - Boost.Asio c++ 网络编程翻译(16)
		
TCP异步服务端 核心功能和同步服务端的功能类似,例如以下: class talk_to_client : public boost::enable_shared_from_this<talk_ ...
 - Boost.Asio c++ 网络编程翻译(10)
		
read/write方法 这些方法对一个流进行读写操作(能够是套接字,或者其它表现的像流的类): async_read(stream, buffer [, completion],handler):这 ...
 - Boost.Asio c++ 网络编程翻译(18)
		
同步服务端 同步服务端也相当简单.它须要两个线程,一个负责接收新的client.另外一个负责处理已经存在的client. 它不能使用单线程:等带一个新的client是一个堵塞操作,所以我们须要另外一个 ...
 - JavaSE_ 网络编程 目录(26)
		
JavaSE学习总结第26天_网络编程26.01 网络编程概述26.02 网络模型概述和图解26.03 网络编程三要素概述26.04 网络编程三要素之IP概述126.05 InetAddress类的概 ...
 - boost.asio系列——socket编程
		
asio的主要用途还是用于socket编程,本文就以一个tcp的daytimer服务为例简单的演示一下如何实现同步和异步的tcp socket编程. 客户端 客户端的代码如下: #include &l ...
 
随机推荐
- 直接插入排序、折半插入排序、Shell排序、冒泡排序,选择排序
			
一.直接插入排序 稳定,时间复杂度:最好O(n).最差O(n^2).平均O(n^2).空间复杂度O(1) void InsertSort(int L[], int n) { int i, j,key; ...
 - mysql copy复制拷贝表数据及结构的几种方式(转)
			
mysql拷贝表操作我们会常常用到,下面就为您详细介绍几种mysql拷贝表的方式,希望对您学习mysql拷贝表方面能够有所帮助.假如我们有以下这样一个表:id username password--- ...
 - freemarker 里 ?? 和 ? 都是什么意思
			
??是推断对象是否为空,比如:<#if object??>object对象不为空(即object存在)</#if> ?后面要加keyword,比如:<#if object ...
 - Eclipse+Maven命令创建webapp项目<三>
			
1.使用maven命令:mvn archetype:create -DgroupId=xxxxx -DartifactId=web-sample -DarchetypeArtifactId=maven ...
 - mysql float double 类型
			
1.float类型 float列类型默认长度查不到结果.必须指定精度. 比方 num float, insert into table (num) values (0.12); select * fr ...
 - ios  ios7 取消控制拉升
			
//推断是否ios7 取消控制拉升 if ([[UIDevice currentDevice].systemVersion doubleValue] >= 7.0) { self.edgesFo ...
 - 无法识别的属性“targetFramework”。请注意,属性名是大写和小写。错误的解决方案
			
"/CRM"应用server错. 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查以下的特定错误具体信息并适当地改动配置文件. 分析器错误消息: 无法识别的属性 ...
 - fork与vfork详解
			
一.fork函数 要创建一个进程,最基本的系统调用是fork,系统调用fork用于派生一个进程,函数原型如下: pid_t fork(void) 若成功,父进程中返回子进程ID,子进程中返回0,若出 ...
 - [TWRP 2.8.4 ] 小米 3W 中文-英文版本 twrp
			
经过半个小时的代码修改,从 2.7.0 移植到 2.8.4 的源代码上. 汉化操作是使用切换语言选项来实现的. 注意: 此版本的 twrp 还不支持双系统切换功能. 作者:laser杨万荣 如果需要转 ...
 - UVA 11248 - Frequency Hopping(网络流量)
			
UVA 11248 - Frequency Hopping 题目链接 题意:给定一个网络,如今须要从1到N运输流量C,问是否可能,假设可能输出可能,假设不可能,再问能否通过扩大一条边的容量使得可能,假 ...