ip::tcp的内部类型socket,acceptor以及resolver是TCP通信中最核心的类。

1.同步客户端代码:

  1. #include <iostream>
  2. #include <boost/asio.hpp>
  3. #include <boost/asio/ip/address.hpp>
  4. using namespace std;
  5. using namespace boost::asio;
  6.  
  7. using namespace boost;
  8.  
  9. int main()
  10. {
  11. io_service ios;
  12. cout << "client start." <<endl;
  13. ip::tcp::socket sock(ios);
  14. ip::tcp::endpoint ep(ip::address::from_string("192.168.1.100"),6688);
  15. sock.connect(ep);
  16. vector<char> str(100,0);
  17. sock.read_some(buffer(str));
  18. cout << "recive from" << sock.remote_endpoint().address();
  19. cout << &str[0] <<endl;
  20. while(1);
  21. return 0;
  22. }

同步服务器端代码:

  1. #include <iostream>
  2. #include <boost/asio.hpp>
  3. #include <boost/asio/ip/address.hpp>
  4. using namespace std;
  5. using namespace boost::asio;
  6.  
  7. using namespace boost;
  8.  
  9. int main()
  10. {
  11. io_service ios;
  12. cout << "server start." <<endl;
  13. //boost::asio::ip::tcp::acceptor acceptor(ios,boost::asio::ip:tcp::endpoint(boost::asio::ip::tcp::v4(),6688));
  14. //
  15. ip::tcp::acceptor acc(ios,ip::tcp::endpoint(ip::tcp::v4(),6688));
  16. cout << acc.local_endpoint().address() <<endl;
  17. while (true)
  18. {
  19. ip::tcp::socket sock(ios);
  20. acc.accept(sock);
  21. cout << sock.remote_endpoint().address() <<endl;
  22. sock.write_some(buffer("hello asio"));
  23. }
  24. return 0;
  25. }

2.异步服务器端代码,两个异步过程一个是接受连接异步处理->另外一个是写对象处理

  1. #include <iostream>
  2. #include <boost/asio.hpp>
  3. #include <boost/asio/ip/address.hpp>
  4. #include <boost/bind.hpp>
  5. using namespace std;
  6. using namespace boost::asio;
  7.  
  8. using namespace boost;
  9.  
  10. class server
  11. {
  12. private:
  13. io_service& ios;//引用不能拷贝
  14. ip::tcp::acceptor acceptor;
  15. typedef shared_ptr<ip::tcp::socket> sock_pt;
  16. public:
  17. server(io_service& io):ios(io),
  18. acceptor(ios,ip::tcp::endpoint(ip::tcp::v4(),6688))
  19. {
  20. start();
  21. }
  22. void start()
  23. {
  24. sock_pt sock(new ip::tcp::socket(ios));
  25. acceptor.async_accept(*sock,bind(&server::accept_handler,this,sock));
  26. }
  27. void accept_handler(sock_pt sock)
  28. {
  29. cout << "client:";
  30. cout << sock->remote_endpoint().address() <<endl;
  31. sock->async_write_some(buffer("hello asio"),bind(&server::write_handler,this));
  32. }
  33. void write_handler()
  34. {
  35. cout << "send msg complete." <<endl;
  36. }
  37. };
  38.  
  39. int main()
  40. {
  41. io_service ios;
  42. cout << "server start." <<endl;
  43. server serv(ios);
  44. ios.run();
  45.  
  46. return 0;
  47. }

boost之网络通信的更多相关文章

  1. boost::asio::ip::tcp实现网络通信的小例子

    同步方式: Boost.Asio是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型. 头文件 #include <boost/asio.hpp> 名空 ...

  2. ros与下位机通信常用的c++ boost串口应用

    一.首先移植c++ boost 库: 1. 先去 Boost官网 下载最新的Boost版本, 我下载的是boost_1_6_0版本, 解压. 2. 进入解压后目录: cd boost_1_6_0, 执 ...

  3. ros与下位机通信常用的c++ boost串口应用--22

    摘要: 原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 一.首先移植c++ boost 库: 1. 先去 Boost官网 下载最新的Boost版本, 我 ...

  4. C++三大库boost、loki、stlport

    转: STL是一个标准,各商家根据这个标准开发了各自的STL版本.而在这形形色色的STL版本中,SGI STL无疑是最引人瞩目的一个.这当然是因为这个STL产品系出名门,其设计和编写者名单中,Alex ...

  5. boost.ASIO-可能是下一代C++标准的网络库

    曾几何时,Boost中有一个Socket库,但后来没有了下文,C++社区一直在翘首盼望一个标准网络库的出现,网络上开源的网络库也有不少,例如Apache Portable Runtime就是比较著名的 ...

  6. boost------asio库的使用1(Boost程序库完全开发指南)读书笔记

    asio库基于操作系统提供的异步机制,采用前摄器设计模式(Proactor)实现了可移植的异步(或者同步)IO操作,而且并不要求多线程和锁定,有效地避免了多线程编程带来的诸多有害副作用. 目前asio ...

  7. boost------asio库的使用2(Boost程序库完全开发指南)读书笔记

    网络通信 asio库支持TCP.UDP.ICMP通信协议,它在名字空间boost::asio::ip里提供了大量的网络通信方面的函数和类,很好地封装了原始的Berkeley Socket Api,展现 ...

  8. boost::asio译文

        Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENS ...

  9. Boost程序库完全开发指南——深入C++“准”标准库(第3版)

    内容简介  · · · · · · Boost 是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉. Boost 由C++标准委员会部分成员所设立的Bo ...

随机推荐

  1. SpringCloud系列十三:Feign对继承、压缩、日志的支持以及构造多参数请求

    1. 回顾 上文讲解了手动创建Feign,比默认的使用更加灵活. 本文将讲解Feign对继承.压缩的支持以及日志和多参数请求的构造等. 2. Feign对继承的支持 Feign支持继承.使用继承,可将 ...

  2. CentOS 7中mariadb编译安装教程systemctl启动

    mariadb做为mysql的替代品 现在centos的新版本yum包已换成mariadb 跟上篇一样只是启动方式改为systemd 安装一些库 yum install gcc gcc-c++ wge ...

  3. 使用scp免passwordserver间传递文件

    1.aserver下执行命令  ssh-keygen -t rsa 2.三个回车 3.在用户的文件夹下 ~/.ssh/产生两个文件,id_rsa,id_rsa.pub 4.把aserver下相应的文件 ...

  4. Windows 8 64bit Xilinx ISE(14.7) Fix License

    http://www.youtube.com/watch?v=ttPbEcNjdo8 It can work successfully!

  5. response.addCookie(cookie),添加失败

    问题:添加cookie到浏览器如下,在浏览器f12查看请求过程,发现cookie中只添加了:JSESSIONID E849DAFEE4A36B6D955F9D96D6D06207 却没有想要的“use ...

  6. Easyui 基于kindeditor的扩展

    源码 /** * Author : ____′↘夏悸 * Easyui KindEditor的简单扩展. * 有了这个之后,你就可以像使用Easyui组件的方式使用KindEditor了 * 前提是你 ...

  7. 【转】Android自动化测试(UiAutomator)——UiObject

    本文主要讲解使用UiAutomator的一些技巧,希望对于初学者有一定的帮助 UiObject 1.首先要声明对象 UiObject XXX = new UiObject(new Selector) ...

  8. 安装VC6.0遇到的问题

    1. 问题现象 安装VC6.0后,又安装了VS2005.用VC6.0打开以前的.dsw文件时,程序自动关闭.如下图所示. 具体操作是:选择一个.dsw文件,右键菜单[打开方式]中选择[Microsof ...

  9. asp.net 2.0里也可以用JSON的使用方法

    本人找到一份,可以在asp.net2.0里实现JSON方式传送数据的方法.但是原方法,不能在数据中带有{.}.[.]."等,所以我做特意做了转意. 全部代码如下. /// <summa ...

  10. 去OpenCVManager,大部分为转载,仅当自己学习使用

    去OpenCVManager方法,可以参考这篇博客http://blog.csdn.net/yanzi1225627/article/details/27863615,可以用,挺好的.我这里只是做个总 ...