客户端和服务端通信----buffer

news/2025/12/1 0:16:37/文章来源:https://www.cnblogs.com/kezz/p/19290960

客户端和服务端通信----buffer

buffer

在网络编程中,操作系统底层 API(如 send()recv())要求传入:

  • 一个 内存地址(指针)
  • 一个 字节数(size)

但 C++ 中有多种数据类型(std::stringstd::vector<char>C 数组等),Asio 需要一个统一接口来表示“一块连续内存”。于是,Asio 引入了 Buffer 模型 —— 不是具体类,而是一套概念(Concept)和辅助函数。

类型 用途 函数
ConstBufferSequence 只读(用于发送数据) write, send
MutableBufferSequence 可写(用于接收数据) read,receive

Asio 提供重载的 asio::buffer() 函数,将常见容器转换为 buffer。

同步读写的客户端和服务端实例

//客户端
#include <iostream>
#include <boost/asio.hpp>
#include <string>
#include <cstring>namespace asio = boost::asio;
using tcp = asio::ip::tcp;const int MAX_LENGTH = 1024;
int main()
{std::string serverIP_ = "127.0.0.1";const unsigned short port = 9999;try{// 1. 创建上下文服务asio::io_context ioc;// 2. 构造endpointauto serverIpAddress_ = asio::ip::make_address(serverIP_);tcp::endpoint serverEndpoint_ = tcp::endpoint(serverIpAddress_, port);// 3. 连接到服务端tcp::socket sock_ = tcp::socket(ioc);boost::system::error_code ec;sock_.connect(serverEndpoint_, ec);if (ec){std::cout << "client connect fail: " << ec.message() << std::endl;return -1;}// 4.发送消息std::cout << "Enter message" << std::endl;char buffer[MAX_LENGTH];std::cin.getline(buffer, MAX_LENGTH);asio::write(sock_, asio::buffer(buffer, strlen(buffer)));// 5.接收消息std::string reply;asio::streambuf sb;size_t replyLength = asio::read_until(sock_, sb, '\n', ec);if (ec && ec != asio::error::eof){std::cout << "read error" << ec.message() << std::endl;}reply = std::string(std::istreambuf_iterator<char>(&sb), {});std::cout << "recvive message is: " << reply << std::endl;}catch (const std::exception& error){std::cout << error.what() << std::endl;return -1;}return 0;
}
//服务端
#include <iostream>
#include <boost/asio.hpp>
#include <cstring>namespace asio = boost::asio;
using tcp = asio::ip::tcp;const unsigned short PORT = 9999;
const int MAX_LENGTH = 1024;
int main()
{try{// 1. 创建上下文asio::io_context ioc;// 2.创建socket open + bind + listenboost::system::error_code ec;tcp::endpoint serverEndpoint = tcp::endpoint(tcp::v4(), PORT);tcp::acceptor acceptor(ioc, serverEndpoint);// 3.accepttcp::socket client = acceptor.accept();// 4.接收数据std::string reply;asio::streambuf streamBuf;size_t replyLength = asio::read_until(client, streamBuf, '\n', ec);if (ec && ec != asio::error::eof){std::cout << "read error" << ec.message() << std::endl;return -1;}reply = std::string(std::istreambuf_iterator<char>(&streamBuf), {});std::cout << "received message : " << reply << std::endl;// 5.发送数据std::cout << "Enter Message" << std::endl;char buf[MAX_LENGTH];std::cin.getline(buf, MAX_LENGTH);asio::write(client, asio::buffer(buf, strlen(buf)),ec);if (ec){std::cout << "send error" << ec.message() << std::endl;return -1;}}catch (const std::exception& error){std::cout << error.what() << std::endl;return -1;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/982423.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scrum冲刺阶段 Day Six

一、站立会议纪要1. 已完成工作 实现启用/禁用用户接口 后台功能 执行接口测试 + 联调验证 测试执行--- 2. 今日计划工作 开发分享访问前端页面 实现分享链接生成与提取码验证接口 实现分片上传、秒传与MD5校验完整逻辑…

156 电脑没有网卡驱动怎么办

电脑没有网卡驱动怎么办 在重装系统之后,我们可能遇到新系统没有合适的网卡驱动,导致系统无法联网的情况。这时我们可以使用连接网线或者使用手机共享网络的方法。如何使用手机共享网络 手机共享网络的本质是个人热点…

134 Gravesoft网页汉化5:Fix WPA Registry——修复WPA注册表

Gravesoft网页汉化5:Fix WPA Registry——修复WPA注册表https://gravesoft.dev/fix-wpa-registry Fix WPA Registry 修复WPA注册表在某些情况下,系统可能会在HKEY_LOCAL_MACHINE\SYSTEM\WPA处损坏WPA注册表项,这可能…

76 为什么Windows系统没有A盘和B盘?系统盘一定是C盘吗?

为什么Windows系统没有A盘和B盘?系统盘一定是C盘吗? 在如今的Windows系统中,大多数用户都会看到硬盘的默认盘符是C盘,而不是A盘或B盘.这背后有着一段有趣的历史.那么,为什么Windows系统选择C盘作为默认盘符?A盘和B盘…

11月阅读笔记(3)

程序员修炼之道》中 “未雨绸缪” 的思维,让我在代码异常处理上有了全新认知。之前写 C++ 作业时,总想着 “先实现功能再说”,比如写一个 “文件读取图书信息” 的函数void readBookFromFile(const string& fil…

攻防世界view_source

攻防世界view_source 1根据题目提示得知是网站源代码 23打开后将网站刷新一下便可看到源代码 4flag:cyberpeace{0caefd5b27ad046a5564ba7169f5350a}

133 Gravesoft网页汉化4:In-place Repair Upgrade——本地修复升级Windows

Gravesoft网页汉化4:In-place Repair Upgrade——本地修复升级Windowshttps://gravesoft.dev/in-place_repair_upgrade In-place Repair Upgrade 本地修复升级Windows(保存文件和应用程序)使用Windows ISO文件进行本…

154 如何在无密码时远程控制域内电脑

如何在无密码时远程控制域内电脑 在一般情况下,使用微软提供的远程桌面功能,我们可以在局域网内控制拥有账号密码的其他Windows系统专业版,企业版,以及专业工作站版本系统的电脑。 但是在某些特殊情况下,我们希望…

130 Gravesoft网页汉化1: 国外优秀激活工具MAS制作团队的Windows系统技术员说明文档

Gravesoft网页汉化1: 国外优秀激活工具MAS制作团队的Windows系统技术员说明文档MASSGRAVE团队出品的MAS脚本是一款优秀的开源Windows激活工具.事实上,MASSGRAVE团队不仅编写了MAS激活工具,还无偿为Windows系统编写了如…

38 把Office整个移动到D盘!

把Office整个移动到D盘! Microsoft Office 是众所周知的最为优秀的办公软件,是微软的力作之一. 然而,当下最为主流的 office 2019/2021/365 同时也因为安装占用过大C盘空间而饱受诟病. 对于office 2019,它的安装文件达…

63 Windows PE秒变Windows RE?到底是谁在用谁?

Windows PE秒变Windows RE?到底是谁在用谁? 评论区有朋友留言一个很有意思的问题. 我们使用Windows原版ISO启动电脑后,有一个界面是这样的:点击 修复计算机,之后出现了这个界面:那么问题就是,这个界面和WindowsRE的界…

Windows系统概述及磁盘分区

Windows系统概述及磁盘分区 Windows系统概述 Windows系统作为世界上使用者最多,最受欢迎的操作系统,值得热爱者们进行详细的研究.我们将分别介绍Windows系统的安装,维护,优化,以及进阶的高级操作.本教程所有的操作均使…

92 Windows 系统中的硬连接、符号链接和目录链接:原理与应用

Windows 系统中的硬连接、符号链接和目录链接:原理与应用 今天笔者将带你深入浅出地了解Windows系统中的三种文件链接:硬连接(Hard Link)、符号链接(Symbolic Link)以及目录链接(Directory Junction)。虽然它们…

112 恢复 Windows 11 经典右键菜单

恢复 Windows 11 经典右键菜单 Windows11的右键菜单为很多人所诟病为"不符合用户习惯","反人类","丑陋","响应速度慢"等等. 如果你也这样认为,那么今天的文章可以帮你把Windo…

151 离线安装Office的逆天技法:一个镜像,通杀所有版本

离线安装Office的逆天技法:一个镜像,通杀所有版本 我曾经详细的介绍过如何使用setup.exe在线下载安装Office。但是这种方法很难控制安装office的组建类型和位宽等细节。有的时候,待安装Office办公套件的电脑甚至处于…

61 把PE系统安装到VHD里?玩的够花,但比PE to Go更快

把PE系统安装到VHD里?玩的够花,但比PE to Go更快! 我之前讲过把PE系统直接释放到U盘里面作为PE to Go使用.网友的思维是强大的,前几天有一位网友就想把PE系统安装到VHD里面.这次我们就来实操一下.原理解析 把PE系统安…

149 物理扇区,逻辑扇区,簇,4K对齐等基础概念介绍

物理扇区,逻辑扇区,簇,4K对齐等基础概念介绍 我们在使用disKgenius软件操作磁盘的时候,经常能遇到涉及到磁盘底层的操作,比如物理扇区,逻辑扇区,簇,4K对齐,MFT表,文件系统等等磁盘的基础概念。今天笔者来详细…

专题:2025半导体行业核心趋势与市场动态报告:AI驱动、先进封装、SiC、掩膜版|附130+份报告PDF、数据、可视化模板汇总下载

原文链接:https://tecdat.cn/?p=44426原文出处:拓端抖音号@拓端tecdat引言 全球半导体行业正站在“技术突破与地缘博弈”的十字路口:AI驱动的算力需求催生指数级增长,而产业链分工重构与技术壁垒形成双重约束,行…

145 使用WindowsRE 进行系统维护的一般方法

使用WindowsRE 进行系统维护的一般方法 微软在Windows8开始引入了WindowsRE ,用于方便运维人员进行系统维护。如果你对于自己使用的第三方WindowsPE 的安全性有顾虑,那么你可以使用WindowsRE 对Windows系统进行直接维…

68 Windows 更新痛点重重无法禁用?到底如何彻底关闭Windows更新?牛掰小工具奉上666

Windows 更新痛点重重无法禁用?到底如何彻底关闭Windows更新?牛掰小工具奉上666 Windows更新策略一向受到广大Windows用户的痛斥,被指责占用大量C盘空间,更新频率过于频繁,更新后导致更多系统问题,甚至无法开机,电脑…