boost之网络通信
ip::tcp的内部类型socket,acceptor以及resolver是TCP通信中最核心的类。
1.同步客户端代码:
- #include <iostream>
- #include <boost/asio.hpp>
- #include <boost/asio/ip/address.hpp>
- using namespace std;
- using namespace boost::asio;
- using namespace boost;
- int main()
- {
- io_service ios;
- cout << "client start." <<endl;
- ip::tcp::socket sock(ios);
- ip::tcp::endpoint ep(ip::address::from_string("192.168.1.100"),6688);
- sock.connect(ep);
- vector<char> str(100,0);
- sock.read_some(buffer(str));
- cout << "recive from" << sock.remote_endpoint().address();
- cout << &str[0] <<endl;
- while(1);
- return 0;
- }
同步服务器端代码:
- #include <iostream>
- #include <boost/asio.hpp>
- #include <boost/asio/ip/address.hpp>
- using namespace std;
- using namespace boost::asio;
- using namespace boost;
- int main()
- {
- io_service ios;
- cout << "server start." <<endl;
- //boost::asio::ip::tcp::acceptor acceptor(ios,boost::asio::ip:tcp::endpoint(boost::asio::ip::tcp::v4(),6688));
- //
- ip::tcp::acceptor acc(ios,ip::tcp::endpoint(ip::tcp::v4(),6688));
- cout << acc.local_endpoint().address() <<endl;
- while (true)
- {
- ip::tcp::socket sock(ios);
- acc.accept(sock);
- cout << sock.remote_endpoint().address() <<endl;
- sock.write_some(buffer("hello asio"));
- }
- return 0;
- }
2.异步服务器端代码,两个异步过程一个是接受连接异步处理->另外一个是写对象处理
- #include <iostream>
- #include <boost/asio.hpp>
- #include <boost/asio/ip/address.hpp>
- #include <boost/bind.hpp>
- using namespace std;
- using namespace boost::asio;
- using namespace boost;
- class server
- {
- private:
- io_service& ios;//引用不能拷贝
- ip::tcp::acceptor acceptor;
- typedef shared_ptr<ip::tcp::socket> sock_pt;
- public:
- server(io_service& io):ios(io),
- acceptor(ios,ip::tcp::endpoint(ip::tcp::v4(),6688))
- {
- start();
- }
- void start()
- {
- sock_pt sock(new ip::tcp::socket(ios));
- acceptor.async_accept(*sock,bind(&server::accept_handler,this,sock));
- }
- void accept_handler(sock_pt sock)
- {
- cout << "client:";
- cout << sock->remote_endpoint().address() <<endl;
- sock->async_write_some(buffer("hello asio"),bind(&server::write_handler,this));
- }
- void write_handler()
- {
- cout << "send msg complete." <<endl;
- }
- };
- int main()
- {
- io_service ios;
- cout << "server start." <<endl;
- server serv(ios);
- ios.run();
- return 0;
- }
boost之网络通信的更多相关文章
- boost::asio::ip::tcp实现网络通信的小例子
同步方式: Boost.Asio是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型. 头文件 #include <boost/asio.hpp> 名空 ...
- ros与下位机通信常用的c++ boost串口应用
一.首先移植c++ boost 库: 1. 先去 Boost官网 下载最新的Boost版本, 我下载的是boost_1_6_0版本, 解压. 2. 进入解压后目录: cd boost_1_6_0, 执 ...
- ros与下位机通信常用的c++ boost串口应用--22
摘要: 原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 一.首先移植c++ boost 库: 1. 先去 Boost官网 下载最新的Boost版本, 我 ...
- C++三大库boost、loki、stlport
转: STL是一个标准,各商家根据这个标准开发了各自的STL版本.而在这形形色色的STL版本中,SGI STL无疑是最引人瞩目的一个.这当然是因为这个STL产品系出名门,其设计和编写者名单中,Alex ...
- boost.ASIO-可能是下一代C++标准的网络库
曾几何时,Boost中有一个Socket库,但后来没有了下文,C++社区一直在翘首盼望一个标准网络库的出现,网络上开源的网络库也有不少,例如Apache Portable Runtime就是比较著名的 ...
- boost------asio库的使用1(Boost程序库完全开发指南)读书笔记
asio库基于操作系统提供的异步机制,采用前摄器设计模式(Proactor)实现了可移植的异步(或者同步)IO操作,而且并不要求多线程和锁定,有效地避免了多线程编程带来的诸多有害副作用. 目前asio ...
- boost------asio库的使用2(Boost程序库完全开发指南)读书笔记
网络通信 asio库支持TCP.UDP.ICMP通信协议,它在名字空间boost::asio::ip里提供了大量的网络通信方面的函数和类,很好地封装了原始的Berkeley Socket Api,展现 ...
- boost::asio译文
Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENS ...
- Boost程序库完全开发指南——深入C++“准”标准库(第3版)
内容简介 · · · · · · Boost 是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉. Boost 由C++标准委员会部分成员所设立的Bo ...
随机推荐
- SpringCloud系列十三:Feign对继承、压缩、日志的支持以及构造多参数请求
1. 回顾 上文讲解了手动创建Feign,比默认的使用更加灵活. 本文将讲解Feign对继承.压缩的支持以及日志和多参数请求的构造等. 2. Feign对继承的支持 Feign支持继承.使用继承,可将 ...
- CentOS 7中mariadb编译安装教程systemctl启动
mariadb做为mysql的替代品 现在centos的新版本yum包已换成mariadb 跟上篇一样只是启动方式改为systemd 安装一些库 yum install gcc gcc-c++ wge ...
- 使用scp免passwordserver间传递文件
1.aserver下执行命令 ssh-keygen -t rsa 2.三个回车 3.在用户的文件夹下 ~/.ssh/产生两个文件,id_rsa,id_rsa.pub 4.把aserver下相应的文件 ...
- Windows 8 64bit Xilinx ISE(14.7) Fix License
http://www.youtube.com/watch?v=ttPbEcNjdo8 It can work successfully!
- response.addCookie(cookie),添加失败
问题:添加cookie到浏览器如下,在浏览器f12查看请求过程,发现cookie中只添加了:JSESSIONID E849DAFEE4A36B6D955F9D96D6D06207 却没有想要的“use ...
- Easyui 基于kindeditor的扩展
源码 /** * Author : ____′↘夏悸 * Easyui KindEditor的简单扩展. * 有了这个之后,你就可以像使用Easyui组件的方式使用KindEditor了 * 前提是你 ...
- 【转】Android自动化测试(UiAutomator)——UiObject
本文主要讲解使用UiAutomator的一些技巧,希望对于初学者有一定的帮助 UiObject 1.首先要声明对象 UiObject XXX = new UiObject(new Selector) ...
- 安装VC6.0遇到的问题
1. 问题现象 安装VC6.0后,又安装了VS2005.用VC6.0打开以前的.dsw文件时,程序自动关闭.如下图所示. 具体操作是:选择一个.dsw文件,右键菜单[打开方式]中选择[Microsof ...
- asp.net 2.0里也可以用JSON的使用方法
本人找到一份,可以在asp.net2.0里实现JSON方式传送数据的方法.但是原方法,不能在数据中带有{.}.[.]."等,所以我做特意做了转意. 全部代码如下. /// <summa ...
- 去OpenCVManager,大部分为转载,仅当自己学习使用
去OpenCVManager方法,可以参考这篇博客http://blog.csdn.net/yanzi1225627/article/details/27863615,可以用,挺好的.我这里只是做个总 ...