使用Boost.Asio获取“整个数据包”

2024-03-09

我有一个 TCP 客户端连接到我的服务器,它正在发送原始数据包。如何使用 Boost.Asio 每次都能获取“整个”数据包(当然是异步的)?假设这些数据包可以是任意大小,最多可达我的内存的完整大小。

基本上,我想避免创建静态大小的缓冲区。


通常,当您在 TCP/IP 之上构建自定义协议时,您会使用简单的消息格式,其中前 4 个字节是包含消息长度的无符号整数,其余是消息数据。如果你有这样的协议,那么接收循环就像下面一样简单(不确定什么是 ASIO 表示法,所以这只是一个想法)

for(;;) {
  uint_32_t len = 0u;
  read(socket, &len, 4); // may need multiple reads in non-blocking mode
  len = ntohl(len);
  assert (len < my_max_len);
  char* buf = new char[len];
  read(socket, buf, len); // may need multiple reads in non-blocking mode
  ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Boost.Asio获取“整个数据包” 的相关文章

  • 在 HKCR 中创建新密钥有效,但不起作用

    我有以下代码 它返回 成功 但使用两种不同的工具使用搜索字符串 3BDAAC43 E734 11D5 93AF 00105A990292 搜索注册表不会产生任何结果 RegistryKey RK Registry ClassesRoot C
  • Grpc - 将消息从一个客户端发送到连接到同一服务器的另一个客户端

    是否可以将消息从一个客户端发送到连接到同一服务器的另一个客户端 我想将数据从一个客户端发送到服务器然后发送到特定客户端 我想我需要获取客户端 ID 但我不知道如何获取此 ID 以及如何从服务器将此消息发送到该客户端 我这里有一个样本 这是一
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My
  • 转换 const void*

    我有一个函数返回一个const void 我想用它的信息作为char 我可以将它投射为 C 风格的罚款 char variable但是当我尝试使用reinterpret cast like reinterpret cast
  • 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

    我有一个要求 我有一个 C 语言的大结构 由大约 30 多个不同数据类型的不同元素组成 typedef struct type1 element1 type2 element2 type3 element3 type2 element4 1
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 在 VS 中运行时如何查看 C# 控制台程序的输出?

    我刚刚编写了一个名为 helloworld 的聪明程序 它是一个 C NET 4 5 控制台应用程序 在扭曲的嵌套逻辑迷宫深处 使用了 Console WriteLine 当我在命令行运行它时 它会运行并且我会看到输出 我可以执行其他命令并
  • 如何使用 x64 运行 cl?

    我遇到了和这里同样的问题致命错误 C1034 windows h 未设置包含路径 https stackoverflow com questions 931652 fatal error c1034 windows h no include
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • 模板外部链接?谁能解释一下吗?

    模板名称具有链接 3 5 非成员函数模板可以有内部链接 任何其他模板名称应具有外部链接 从具有内部链接的模板生成的实体与在其他翻译单元中生成的所有实体不同 我知道使用关键字的外部链接 extern C EX extern C templat
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • 将二变量 std::function 转换为单变量 std::function

    我有一个函数 它获取两个值 x 和 y 并返回结果 std function lt double double double gt mult double x double y return x y 现在我想得到一个常量 y 的单变量函数
  • Visual Studio 2015:v120 与 v140?

    仅供参考 Win10 x64 我今天开始尝试 Visual Studio 2015 在弄清楚如何运行 C C 部分后 我尝试加载一个大型个人项目 该项目使用非官方的glsdk http glsdk sourceforge net docs
  • C++:为什么 numeric_limits 对它不知道的类型起作用?

    我创建了自己的类型 没有任何比较器 也没有专门化std numeric limits 尽管如此 由于某种原因 std numeric limits
  • EntityFramework 6.0.0.0 读取数据,但不插入

    我创建了一个基于服务的数据库 folderName gt Add New Item gt Data gt Service based Database文件到 WPF 应用程序中 然后我用过Database First方法并创建了Person
  • 在 System.Type 上使用条件断点时出错

    这是函数 public void Init System Type Type this Type Type BuildFieldAttributes BuildDataColumns FieldAttributes 我在第一行设置了一个断点
  • 是否允许全局静态标识符以单个 _ 开头?

    换句话说 可能static 文件范围 全局变量恰好以一个下划线开头 而不会产生与 C 实现发生名称冲突的可能性 https www gnu org software libc manual html node Reserved Names

随机推荐

  • Rails 3.1 中的无表模型

    好像this http railscasts com episodes 193 tableless model该方法在 Rails 3 1 中不再适用 那么 有人有可行的解决方案吗 其实我已经找到这个了gist https gist git
  • 如何在编辑表单中预先填充collection_check_boxes?

    GitHub 仓库 https github com Yorkshireman mywordlist https github com Yorkshireman mywordlist 我用谷歌搜索了一下这个 我确信有一种方法 可能需要在 h
  • Python 字典中的最后一个键

    我很难弄清楚 Python 字典中最后一个键的语法是什么 我知道对于 Python 列表 人们可能会这样说来表示最后一个 list 1 我还知道可以获取字典的键列表 如下所示 dict keys 但是 当我尝试使用以下逻辑代码时 它不起作用
  • 在 ZF2 中发送带有附件的电子邮件

    如何在 zf2 中发送包含 text plain text html 和附件的电子邮件 我使用此代码通过 smtp 发送电子邮件 files this gt params gt fromFiles smtp new Zend Mail Tr
  • 如何使用 pyPdf 合并两个横向 pdf 页面

    我在使用 pyPdf 合并两个 PDF 文件时遇到问题 当我运行以下代码时 水印 第 1 页 看起来不错 但第 2 页已顺时针旋转 90 度 有什么想法吗 from pyPdf import PdfFileWriter PdfFileRea
  • 语法错误:无法分配给运算符

    def RandomString length distribution string for t in distribution t 1 length t 1 string return shuffle string 这会返回标题中描述的
  • Bash 错误:需要整数表达式

    在下面的部分中 您将看到我尝试在 UNIX 计算机上运行的 shell 脚本以及脚本 当我运行这个程序时 它给出了预期的输出 但它也给出了记录中显示的错误 可能是什么问题以及如何解决它 首先 脚本 usr bin bash while re
  • 如何在IE中使用border-radius.htc制作圆角

    如何在IE中使用border radius htc制作圆角 我在用边界半径 htc http www htmlremix com css curved corner border radius cross browser修复 IE 中的边框
  • JavaScript 中的 Google Analytics API

    我正在使用 Google Analytics Javascript 库让用户查看他们所在的特定页面的地理地图 然而 每次他们尝试这样做时 您都必须经过身份验证过程才能将我的数据显示在我的页面上 我怎样才能找到替代方案 我只想通过页面上的可视
  • 如何强制keras使用tensorflow GPU后端

    我知道这是最受欢迎的问题之一 但到目前为止 没有一个解决方案对我有用 我正在运行一个用以下语言编写的遗留代码tensorflow v1 13 1 and keras v2 2 4 我无法修改代码来运行最新的张量流版本 由于 keras 现已
  • 如何编译 Programmer Dvorak?

    我正在尝试编译开源项目程序员德沃夏克 http www kaufmann no roland dvorak 问题是它有点旧 并且不能使用当前版本的构建工具进行构建 您可以在我的网站上查看完整的源代码以及我在线所做的修改项目的 Google
  • sqlite alter table 在单个语句中添加多个列

    是否可以在 sqlite 的单个语句中更改表添加多个列 以下内容将不起作用 alter table test add column mycolumn1 text add column mycolumn2 text 不 您必须一次添加一个 请
  • 使用 MS SQL Server 读取包含多个 JSON 对象的文件

    我需要帮助在 MSSQL 中读取 JSON 文件 我有一个像这样的 json 格式 id oid 5c6ceb395916c77f71d9f531 uuid 8337df01 7d98 4cdd b5eb 7fafa88d3740 firs
  • CoreAnimation、AVFoundation 和视频导出功能

    我正在寻找将图片序列导出为 QuickTime 视频的正确方法 我知道 AV Foundation 能够合并或重新组合视频 还能够添加音轨来构建单个视频资产 现在 我的目标有点不同 我想从头开始创建一个视频 我有一组 UIImage 我需要
  • capistrano 部署时使用了错误版本的 Ruby

    在我使用 capistrano 部署到新服务器后 我看到 共享 捆绑 红宝石 1 9 1 gems 我什至没有在服务器上安装 ruby 1 9 1 如果我跑 ruby v它返回 1 9 3 但在所有的 capisrtano 操作中我一直看到
  • Spring、NotReadablePropertyException 和 Glassfish 版本

    我正在开发一个使用 Spring MVC 的 Web 应用程序 它在 Glassfish 3 0 1 上运行良好 但当迁移到 Glassfish 3 1 时 它开始表现得很奇怪 有些页面仅部分显示 或根本不显示任何内容 并且在日志中 有很多
  • 使用正则表达式和 bash 重命名文件[重复]

    这个问题在这里已经有答案了 可能的重复 在unix中一次重命名多个文件 https stackoverflow com questions 1086502 rename multiple files at once in unix 我想使用
  • 应用程序身份验证和应用程序用户的预期用例是什么?

    我试图了解应用程序身份验证和应用程序用户的预期用例是什么 我基本上正在考虑构建一个应用程序 该应用程序将使用 Box 来存储订阅我们服务的用户的数据 我们的服务将允许每个用户访问和查看他们的数据 如果我的帐户基本上拥有所有订阅用户的数据 我
  • 我们可以使用 Bunit 在 Blazor WebAssembly 中进行单元测试控制器吗

    我们可以使用 Bunit x 单元对 Blazor WebAssembly 中的控制器 端点进行单元测试吗 https bunit dev https bunit dev 像这样https learn microsoft com en us
  • 使用Boost.Asio获取“整个数据包”

    我有一个 TCP 客户端连接到我的服务器 它正在发送原始数据包 如何使用 Boost Asio 每次都能获取 整个 数据包 当然是异步的 假设这些数据包可以是任意大小 最多可达我的内存的完整大小 基本上 我想避免创建静态大小的缓冲区 通常