Boost Asio要点概述(三)

本文概述了Boost Asio库在流式操作、栈式/非栈式协程、TCP/UDP/ICMP支持、计时器、串口编程、Unix/Linux及Windows特殊支持和OpenSSL整合等方面的要点。讲解了iostream的使用限制,以及各种计时器类型的差异。还介绍了串口编程的基本步骤,并展示了Windows下 HANDLE 的封装操作。
摘要由CSDN通过智能技术生成

五、流式操作

许多IO对数据的操作是按流式来进行的,为此Asio提供了流式操作,如上面的streambuf。对最典型的是TCP流,提供了ip::tcp::iostream。下例是一个简单的示例。

void iostreamclient(int argc , char* argv[])
{
	boost::asio::ip::tcp::iostream stream;
	stream.expires_after(std::chrono::seconds(20));
	try
	{
		stream.connect(argv[1], argv[2]);
		std::cout<<"connected"<<argv[1]<<" "<<argv[2]<<std::endl;			
		char buf[256];
		std::cin>>buf;			
		stream <<buf;
		stream.flush();
		std::cout <<"Send["<<strlen(buf)<<"]:"<<buf<<std::endl;
		memset(buf,0,sizeof(buf));
		stream>>buf;					
		std::cout<<"Recv:"<<buf<<std::endl;
	}
	catch (std::exception& e)  
	{  
		std::cout << e.what() << ",exits"<<std::endl;  
	}  
}	

这个示例中,一次性发送给服务器端内容,并从服务器端接收应答内容,风格完全是流式数据输入输出的样式。由于iostream中采用了streambuf,其内存分配是一次性固定的,所以并不适合多次使用。

总的说,iostream虽然使用起来比较方便,但“控制力”太弱,比较适合做一些测试工具等要求不高的场合。

六、栈式/非栈式协程

见作者的上一篇博文。

七、对TCP/UDP/ICMP的支持

TCP, UDP ,ICMP是tcp/ip族中用来通讯的三个协议,Asio分别提供了ip::tcp::socket, ip::udp::socket,ip::icmp::socket对它们直接进行了支持,当然还有些辅助类,例如address,endpoint和resolver类,常用的就这么些。但实际上,Asio为了更好的兼任性以及扩展方便,抽象出好多基类,它们一般情况下并不直接使用,而是对库开发者有效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值