网站建设工作标准小程序游戏源码

张小明 2026/1/12 16:13:14
网站建设工作标准,小程序游戏源码,阿里巴巴做公司网站,台江网站建设一、buffer是什么任何网络库都有提供buffer的数据结构#xff0c;所谓buffer就是接收和发送数据时缓存数据的结构。 boost::asio提供了asio::mutable_buffer 和 asio::const_buffer这两个结构#xff0c;他们是一段连续的空间#xff0c;首字节存储了后续数据的长度。 asio:…一、buffer是什么任何网络库都有提供buffer的数据结构所谓buffer就是接收和发送数据时缓存数据的结构。boost::asio提供了asio::mutable_buffer 和 asio::const_buffer这两个结构他们是一段连续的空间首字节存储了后续数据的长度。asio::mutable_buffer用于写服务asio::const_buffer用于读服务。但是这两个结构都没有被asio的api直接使用。对于api的buffer参数asio提出了MutableBufferSequence和ConstBufferSequence概念他们是由多个asio::mutable_buffer和asio::const_buffer组成的。也就是说boost::asio为了节省空间将一部分连续的空间组合起来作为参数交给api使用。我们可以理解为MutableBufferSequence的数据结构为std::vectorasio::mutable_buffer结构如下每隔vector存储的都是mutable_buffer的地址每个mutable_buffer的第一个字节表示数据的长度后面跟着数据内容。这么复杂的结构交给用户使用并不合适所以asio提出了buffer()函数该函数接收多种形式的字节流该函数返回asio::mutable_buffers_1 o或者asio::const_buffers_1结构的对象。如果传递给buffer()的参数是一个只读类型则函数返回asio::const_buffers_1 类型对象。如果传递给buffer()的参数是一个可写类型则返回asio::mutable_buffers_1 类型对象。asio::const_buffers_1和asio::mutable_buffers_1是asio::mutable_buffer和asio::const_buffer的适配器提供了符合MutableBufferSequence和ConstBufferSequence概念的接口所以他们可以作为boost::asio的api函数的参数使用。简单概括一下我们可以用buffer()函数生成我们要用的缓存存储数据。比如boost的发送接口send要求的参数为ConstBufferSequence类型//ConstBufferSequence 常量缓冲区序列类型 templatetypename ConstBufferSequence std::size_t send(const ConstBufferSequence buffers);1.利用buffer发送数据void use_const_buffer() { std::string buf hello boost; //转换为const_buffer类型 buf.c_str()为字符串首地址buf.length()字符串的长度 asio::const_buffer asio_buf(buf.c_str(), buf.length()); //构建缓冲区序列vector 容器存储多个 const_buffer std::vectorasio::const_buffer buffers_sequence; // // 将单个 const_buffer 添加到缓冲区序列中 // 实际场景中可添加多个不同的 const_buffer发送时会按顺序拼接所有缓冲区数据 buffers_sequence.push_back(asio_buf); }下面这种方法可以直接用buffer函数转化为send需要的参数类型void use_buffer_str() { asio::const_buffer output_buf asio::buffer(hello world); }我们也可以将数组转化为send接受的类型void use_buffer_array() { const size_t BUF_SIZE_BYTES 20; std::unique_ptrchar[]buf(new char[BUF_SIZE_BYTES]); auto input_buf asio::buffer(static_castvoid*(buf.get()), BUF_SIZE_BYTES); }二、asio socket同步读写同步写1.同步写write_someboost::asio提供了几种同步写的apiwrite_some可以每次向指定的空间写入固定的字节数如果写缓冲区满了就只写一部分返回写入的字节数。void wirte_to_socket(asio::ip::tcp::socket sock) { std::string buf Hello world; //total_bytes_w是已发送的字节数 std::size_t total_bytes_w 0; //循环发送 //write_som 返回每次写入的字节数 while (total_bytes_w ! buf.length()) { total_bytes_w sock.write_some(asio::buffer(buf.c_str() total_bytes_w, buf.length() - total_bytes_w)); } }2.同步写sendwrite_some使用起来比较麻烦需要多次调用asio提供了send函数。send函数会一次性将buffer中的内容发送给对端如果有部分字节因为发送缓冲区满无法发送则阻塞等待直到发送缓冲区可用则继续发送完成。int send_data_by_send() { std::string raw_ip_address 192.168.3.11; unsigned short port_num 6666; try { asio::ip::tcp::endpoint ep(asio::ip::make_address(raw_ip_address), port_num); asio::io_context ioc; asio::ip::tcp::socket sock(ioc, ep.protocol()); sock.connect(ep); std::string buf Hello world; int send_length sock.send(buf.c_str(), buf.length()); if (send_length 0) { return 0; } } catch (system::system_error e) { std::cout Error code e.code() . Message: e.what(); return e.code().value(); } }3.同步写write类似send方法asio还提供了一个write函数可以一次性将所有数据发送给对端如果发送缓冲区满了则阻塞直到发送缓冲区可用将数据发送完成。int send_data_by_write() { std::string raw_ip_address 192.168.3.11; unsigned short port_num 6666; try { asio::ip::tcp::endpoint ep(asio::ip::make_address(raw_ip_address), port_num); asio::io_context ioc; asio::ip::tcp::socket sock(ioc, ep.protocol()); sock.connect(ep); std::string buf Hello world; int send_length asio::write(sock,asio::buffer(buf.c_str(), buf.length())); if (send_length 0) { return 0; } } catch (system::system_error e) { std::cout Error code e.code() . Message: e.what(); return e.code().value(); } }同步读1.同步读read_some同步读和同步写类似提供了读取指定字节数的接口read_somestd::string read_from_socket(asio::ip::tcp::socket sock) { const unsigned char MESSAGE_SIZE 7; char buf[MESSAGE_SIZE]; std::size_t total_bytes_read 0; while (total_bytes_read ! MESSAGE_SIZE) { total_bytes_read sock.read_some(asio::buffer(buf total_bytes_read, MESSAGE_SIZE - total_bytes_read)); } return std::string(buf, total_bytes_read); } int read_data_byread_some() { std::string raw_ip_address 192.168.3.11; unsigned short port_num 6666; try { asio::ip::tcp::endpoint ep(asio::ip::make_address(raw_ip_address), port_num); asio::io_context ioc; asio::ip::tcp::socket sock(ioc, ep.protocol()); sock.connect(ep); read_from_socket(sock); } catch (system::system_error e) { std::cout Error code e.code() . Message: e.what(); return e.code().value(); } }2.同步读receive可以一次性同步接收对方发送的数据int read_data_by_recevie() { std::string raw_ip_address 192.168.3.11; unsigned short port_num 6666; try { asio::ip::tcp::endpoint ep(asio::ip::make_address(raw_ip_address), port_num); asio::io_context ioc; asio::ip::tcp::socket sock(ioc, ep.protocol()); sock.connect(ep); const unsigned char Buff_SIZE 7; char buff_recevie[Buff_SIZE]; int receive_length sock.receive(asio::buffer(buff_recevie, Buff_SIZE)); if (receive_length 0) { std::cout receive failed std::endl; } } catch (system::system_error e) { std::cout Error code e.code() . Message: e.what(); return e.code().value(); } }3.同步读read可以一次性同步读取对方发送的数据int read_data_by_read() { std::string raw_ip_address 192.168.3.11; unsigned short port_num 6666; try { asio::ip::tcp::endpoint ep(asio::ip::make_address(raw_ip_address), port_num); asio::io_context ioc; asio::ip::tcp::socket sock(ioc, ep.protocol()); sock.connect(ep); const unsigned char Buff_SIZE 7; char buff_recevie[Buff_SIZE]; int receive_length asio::read(sock,asio::buffer(buff_recevie, Buff_SIZE)); if (receive_length 0) { std::cout receive failed std::endl; } } catch (system::system_error e) { std::cout Error code e.code() . Message: e.what(); return e.code().value(); } }
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

伪原创嵌入网站wordpress 删除重复文章

在人工智能技术迭代加速的2025年,腾讯正式向全球开发者开放混元大语言模型Hunyuan-4B预训练版本。这款具备40亿参数规模的AI模型不仅在MMLU权威测试中取得74.01%的优异成绩,更通过创新技术架构实现了从边缘计算设备到企业级服务器的全场景部署覆盖。尤其…

张小明 2026/1/10 5:57:12 网站建设

网站开发常见方法赚钱链接网站

JNDI-Exploit-Kit 是一款专业的Java安全测试工具,专门用于检测和防护JNDI注入风险。无论您是安全测试新手还是资深专家,都能通过本指南快速掌握其核心用法。 【免费下载链接】JNDI-Exploit-Kit JNDI-Exploitation-Kit(A modified version of …

张小明 2026/1/10 5:56:56 网站建设

海南做网站的技术公司济南高新区网站建设公司

文章目录具体实现截图主要技术与实现手段关于我本系统开发思路java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 同行可拿货,招校园代理 小程序springboot电子数码产品租赁系统_g390v54f 主…

张小明 2026/1/11 22:38:20 网站建设

机关内网站建设方案书专业制作网站的基本步骤

PyZh项目:Python技术文档翻译与协作平台完全指南 【免费下载链接】PyZh :books: 一起写Python文章,一起看Python文章 - 利用readthedocs的Python技术文章的收集和翻译。 项目地址: https://gitcode.com/gh_mirrors/py/PyZh PyZh是一个专注于Pytho…

张小明 2026/1/13 7:09:34 网站建设

正规的家居行业网站开发wordpress插件哪里下载

集成学习、随机森林与AdaBoost 系统梳理 本文将从集成学习基础、随机森林(Bagging代表)、AdaBoost(Boosting代表) 三个核心模块,结合语法、表格、实战案例,系统讲解相关知识,并补充扩展算法与对…

张小明 2026/1/10 23:42:08 网站建设

灰色词网站seo怎么做百度网站推广

从学术研究到工业落地:Llama-Factory打通大模型最后一公里 在大模型技术席卷全球的今天,越来越多的企业和研究团队开始尝试将LLaMA、Qwen这类强大的预训练语言模型应用于实际业务场景。然而,理想很丰满,现实却常常骨感——一个通用…

张小明 2026/1/10 23:42:06 网站建设