boost教程:http://zh.highscore.de/cpp/boost/
改写7.4网络编程案例,服务器支持连接多个客户端 服务端:
#include <iostream>
#include <string>
#include <boost/asio.hpp> /// <summary>
/// 简单服务器,客户端连接就发送 HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, world!
/// </summary> boost::asio::io_context io;
boost::asio::ip::tcp::socket sock(io);
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), 9076);
boost::asio::ip::tcp::acceptor acceptor(io, endpoint);
std::string data = "HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, world!"; void accept_handler(const boost::system::error_code& ec)
{
if (!ec)
  {
//如果有新客户端连接,需要将sock转移给新的客户端sock,原来的sock用于继续接收新客户端
boost::asio::ip::tcp::socket client_sock(std::move(sock));
client_sock.async_write_some(boost::asio::buffer(data), [](const boost::system::error_code& ec, std::size_t size) {});
}
acceptor.async_accept(sock, accept_handler);
}
int main()
{
acceptor.listen();
acceptor.async_accept(sock,accept_handler); io.run();
}
客户端:
#include <boost/asio.hpp>
#include <boost/array.hpp>
#include <iostream>
#include <string> boost::asio::io_context io;
boost::asio::ip::tcp::socket sock(io);
boost::asio::ip::tcp::resolver resolver(io);
boost::array<char, 1024> buff; void read_handler(const boost::system::error_code& ec, std::size_t size)
{
//请留意,read_handler() 在将数据写出至 std::cout 之后,会再次调用 async_read_some() 方法。
//这是必需的,因为无法保证仅在一次异步操作中就可以接收到整个网页。 async_read_some() 和 read_handler()
//的交替调用只有当连接被破坏时才中止,如当 web 服务器已经传送完整个网页时。 这种情况下,在 read_handler() 内部将报告一个错误,
// 以防止进一步将数据输出至标准输出流,以及进一步对该 socket 调用 async_read() 方法。 这时该例程将停止,因为没有更多的异步操作了。
if (!ec)
{
std::cout << std::string(buff.data(), size) << std::endl;
//客户端接收一次消息接收完就结束进程
sock.async_read_some(boost::asio::buffer(buff), read_handler);
}
//客户端可以继续接收消息,不结束进程
//sock.async_read_some(boost::asio::buffer(buff), read_handler);
} void connect_handler(const boost::system::error_code& ec)
{
if (!ec)
{
sock.async_read_some(boost::asio::buffer(buff), read_handler);
}
} void resolver_handler(const boost::system::error_code& ec, boost::asio::ip::tcp::resolver::iterator it)
{
if (!ec)
{
sock.async_connect(*it, connect_handler);
}
}
int main()
{
boost::asio::ip::tcp::resolver::query query("127.0.0.1", "9076");
resolver.async_resolve(query, resolver_handler);
io.run();
}

boost asio 网络编程案例简单改写的更多相关文章

  1. boost Asio网络编程简介

    :first-child { margin-top: 0px; } .markdown-preview:not([data-use-github-style]) h1, .markdown-previ ...

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

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

  3. Java 学习之网络编程案例

    网络编程案例 一,概念 1,网络编程不等于网站编程 2,编程只和传输层打交道,即TCP和UDP两个协议 二,案例 1,TCP实现点对点的聊天 Server端:两个输入流:读客户端和控制台,一个输出端: ...

  4. boost asio 学习(九) boost::asio 网络封装

    http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=10 9. A ...

  5. boost::asio网络传输错误码的一些实验结果(recv error_code)

    错误码很重要,可以由此判断网络连接到底发生了神马事情,从而驱动高层逻辑的行为.只有笼统的错误码判断的网络层是不够规范的,鄙人觉得有些错误码还是需要在网络层就区分开的,特此记录一些当前实验的错误码以及发 ...

  6. Java网络编程案例---聊天室

    网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net包中JavaSE的API包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和接口,来专注于解决 ...

  7. Python网络编程-Socket简单通信(及python实现远程文件发送)

    学习python中使用python进行网络编程,编写简单的客户端和服务器端进行通信,大部分内容来源于网络教程,这里进行总结供以后查阅. 先介绍下TCP的三次握手: 1,简单的发送消息: 服务器端: i ...

  8. Java网络编程以及简单的聊天程序

    网络编程技术是互联网技术中的主流编程技术之一,懂的一些基本的操作是非常必要的.这章主要讲解网络编程,UDP和Socket编程,以及使用Socket做一个简单的聊天软件. 全部代码下载:链接 1.网络编 ...

  9. Linux网络编程案例分析

    本代码来自于博主:辉夜星辰 本篇主要对运行代码中出现的问题进行分析,代码本身的内容后续展开讨论. 服务器端代码 /* Linux网络编程之TCP编程,服务器端读数据 socket函数之后,返回值ser ...

  10. Python学习笔记(二)网络编程的简单示例

    Python中的网络编程比C语言中要简洁很多,毕竟封装了大量的细节. 所以这里不再介绍网络编程的基本知识.而且我认为,从Python学习网络编程不是一个明智的选择.   简单的TCP连接 服务器代码如 ...

随机推荐

  1. 微信公众号签名错误(invalid signature)的问题排查

    之前写好的代码,好多项目一直在用没啥问题,今天做新项目,在调用的时候,wx.config提示签名错误(invalid signature),这搞得相当郁闷,没办法,只能重新一点一点调试. 按照官方的说 ...

  2. 【动画笔记】数据结构-AVL树的插入操作

    本笔记前置知识: 二叉搜索(排序)树及其插入操作. 本文主要围绕AVL树的平衡因子.纸上做题思路.失衡类型(LL/RR/LR/RL).失衡调整方法.插入后回溯这几部分知识点展开. 注: 本笔记中的平衡 ...

  3. Cesium鼠标移动到模型上,给模型添加高亮轮廓(四)

    2023-01-09 Cesium虽然也支持两种方式(Entity和Primitive)加载3D Tiles数据, 但因为多数情况下3D Tiles数据都是成片区的数据,数据量比较大,所以为了保证性能 ...

  4. gitbook使用指南

    一. node 下载 不要去node官网下载,那是最新版的,官方没提供旧版node.如果下载了最新版的还得下载一个管理node版本的工具,很麻烦且没必要. 在这个网站下载node:https://no ...

  5. JZOJ 5346. 【NOIP2017提高A组模拟9.5】NYG的背包

    题目 分析 很神奇的贪心 \(Code\) #include<cstdio> #include<algorithm> using namespace std; typedef ...

  6. react-native-sortable-list没有渲染数据

    问题如题. 原因是我的order数组为空数组,应该将数组元素补充上.

  7. rn用Modal实现Drawer

    PS:本文仅说明Modal可以用来做Drawer,并不介绍Modal的用法. 今天在开发的时候,想要使用Drawer. RN原生不自带Drawer,react-native-drawer又有bug(没 ...

  8. java学习日记20230225-java介绍

    sun公司 oak语言--java gosling >sun 1995 java第一个版本 2009年 甲骨文公司收购sun 2011 java7 2014 java8 2022-2030年 长 ...

  9. NSIS KillProcDLL插件 扩展使用

    客户端插件KillProcDLL ,用于结束进程. 官网文档:https://nsis.sourceforge.io/KillProcDLL_plug-in 使用场景 卸载程序时,结束正在运行的应用程 ...

  10. 如何删除Word文档中的空白页

    需求 平常我们写 Office 文档的时候,经常会不小心多加几页空白,那么如何删除 word 文档中的空白页呢? 小编结合网友提供的办法和亲身测试的操作经验,给大家提供几个可行的方案. 原文:如何删除 ...