使用 boost::asio::async_read() 的问题

2024-03-06

这是我使用的代码:

class Server
{
.....

void Server::accepted()
{
    std::cout << "Accepted!" << std::endl;

    boost::array<char, 1> buf;
    boost::asio::async_read(socket, boost::asio::buffer(buf),
        boost::bind(&Server::handleRead, this, buf, boost::asio::placeholders::error));
}

void Server::handleRead(boost::array<char, 1> buf, const boost::system::error_code& error)
{
    if(!error)
    {
        std::cout << "Message: " << buf.data() << std::endl;
    }
    else
    {
        std::cout << "Error occurred." << std::endl;
    }
}

.....
}

问题是我总是从客户端获得相同的数据:特定的字符。 在我的客户端中,我尝试发送其他字符,但服务器仍然显示相同的字符。

当我尝试读取超过 1 个字节时,出现错误buf变量在初始化之前使用。


您正在使用局部变量buf作为读缓冲区,这是危险的并且不起作用。此外,您只是将该缓冲区的原始内容发送到处理程序。因此,您需要使用寿命更长的缓冲区。像这样的东西:

class Server
{
.....

boost::array<char, 1> buf;

void Server::accepted()
{
    std::cout << "Accepted!" << std::endl;

    boost::asio::async_read(socket, boost::asio::buffer(buf),
        boost::bind(&Server::handleRead, this, boost::asio::placeholders::error));
}

void Server::handleRead(const boost::system::error_code& error)
{
    if(!error)
    {
        std::cout << "Message: " << buf.data() << std::endl;
    }
    else
    {
        std::cout << "Error occurred." << std::endl;
    }
}

.....
}

edit:或者,使用堆分配的缓冲区(不确定代码是否正确,但你会明白的):

void Server::accepted()
{
    std::cout << "Accepted!" << std::endl;

    boost::shared_ptr<boost::array<char, 1>> buf(new boost::array<char, 1>);

    boost::asio::async_read(socket, boost::asio::buffer(*buf),
        boost::bind(&Server::handleRead, this, buf, boost::asio::placeholders::error));
}

void Server::handleRead(boost::shared_ptr<boost::array<char, 1>> buf, const boost::system::error_code& error)
{
    if(!error)
    {
        std::cout << "Message: " << buf->data() << std::endl;
    }
    else
    {
        std::cout << "Error occurred." << std::endl;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 boost::asio::async_read() 的问题 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • 如何在 ASP.NET Core 中获取 SignalR Hub 上下文?

    我正在尝试使用以下命令获取集线器的上下文 var hubContext GlobalHost ConnectionManager GetHubContext
  • 如何获取“未过滤”的数组项?

    假设我有一个数组 我通过调用来过滤它myItems filter filterFunction1 并从中获取一些物品 然后我想运行另一个过滤功能filterFunction2与未被选中的其余项目filterFunction1 是否可以获取调
  • 在VHDL中将8位二进制数转换为BCD

    该算法众所周知 您进行 8 次左移 并在每次移位后检查个位 数十位或数百位 每个 4 位 如果它们超过 4 个 则将 3 个添加到该组中 依此类推 这是一个基于流程的解决方案 但不起作用 它会编译 但输出不是我想要的 有什么想法可能是什么问
  • wp_nav_menu 更改子菜单类名称?

    有没有办法改变孩子 ul class sub menu WordPress 本身生成自定义类名 我认识家长 ul 您可以删除或更改名称 menu class gt newname 我找不到答案 我试过 submenu class gt cu
  • 将 APK 发布到 Play 商店时出现构建版本问题

    我看过很多答案 但大多数都已经过时了 我正在尝试使用 Azure DevOps 管道将我的 Android 应用程序发布到 Play 商店 我遇到了 APK 版本代码的问题 出现以下错误 APK指定已使用的版本代码 任何人都知道如何增加存在
  • Tensorflow:每类 IOU

    我正在尝试使用 deeplab 进行语义分割 我想计算每个班级的 IOU 仅针对个人的 IOU 而不是平均 IOU 在 L142 处https github com tensorflow models blob master researc
  • 为什么当 Visual Studio 打开时,智能感知和代码建议停止工作?

    我在 Microsoft 中遇到 Intellisense 问题视觉工作室2012 http en wikipedia org wiki Microsoft Visual Studio Visual Studio 2012 我将在一个项目中
  • 嵌套索引路由未在react-router-dom v6中呈现

    我有一个安装了react router dom v6 的create react app 项目 尝试使用新的索引路由语法 以便我的 HomePage 组件在当前为布局组件提供服务的索引处呈现 当我导航到索引 http localhost 3
  • 在 OkHttp java 中创建承载授权标头

    我需要使用OkHttp3在java中作为HTTP客户端并在请求中发送授权标头 example 授权 持票人 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9 eyJpc3MiOiJodHRaswczovL2F1dGg
  • 通过segue传递数据

    我正在使用tableview 控制器和detailView 做简单的iOS 应用程序 我想要的只是通过 segue 传递数据 这就是它的样子 我想要的是 您单击 Mark za 它将打开 URL 视频编号 1 如果您单击 TV JOJ 它将
  • 在 beforeSend 上停止 $.ajax

    我有这个 jQuery ajax 调用 ajax url my action dataType script beforeSend function if 1 1 just an example return false complete
  • 转换为具有相同数据成员布局但实现不同的类是否安全?

    第一个类将用于私有继承 以确保布局完全相同 这应该可以保证铸造安全 include
  • Angular 构建无法在服务器上运行

    我正在尝试在服务器上运行我的 AngularJS 前端 我正在使用 Yeoman 来构建应用程序 我上传了非常基本的 hello world 应用程序 并获得了未加载 JavaScript 的纯 HTML 文本 Chrome 中的控制台是这
  • 在 Mac 上使用 XAMPP 安装 XDebug for PHP

    我有一台安装了全新 OSX Mojave 的 Mac 我下载了 XAMPP 7 3 并安装 本地 Apache Web 服务器正常工作 我从仪表板获得的 PHPInfo 显示了 php ini 文件的所有正确信息 即 Application
  • Django:选择性地将 CSS 样式应用到测验单选按钮

    我让用户进行测验 在每个问题之后 我想向他们展示他们的答案是正确还是错误 正确的答案应以绿色突出显示 他们的答案 如果不正确 应以红色突出显示 使用 Twitter Bootstrap 样式 我目前正在 Django 和 HTML 中渲染测
  • D3js - 使用 d3.json 从“JSON 数据”输入绘制折线图

    我最近开始学习 D3 js 并遇到了一些问题 这是我到目前为止所尝试过的 这是我的JS d3 json js sample2 json function data var canvas d3 select body append svg a
  • Typescript 扩展方法编译但在运行时不起作用

    我用一个简单的方法扩展了 Typescript 中的 String 原型 字符串扩展 ts String prototype toCleanedTitleCase function string let titleCase this rep
  • 如何从 xaxis 中删除空因子

    尝试使用 filter select 和无光泽的工作制作交互式绘图条形图 我正在处理许多机场 gt 100 个 的数据 条形图通常过于拥挤 无法支持用户将一个机场 APT x 观察到的性能 值 VAL 与对等机场的子集进行比较 这个想法是使
  • 印度的 R 包?

    我正在美国 R 中以县为基础进行大量统计分析 但我也想对印度做一些研究 我找到了州地图 但在 R 中没有找到区地图 我可以在 d3 js 中找到这样的东西 但我不想放弃 R 印度是否有类似于 地图 的 R 包 您可以使用来自GADM htt
  • 使用 boost::asio::async_read() 的问题

    这是我使用的代码 class Server void Server accepted std cout lt lt Accepted lt lt std endl boost array