问题标签 [boost-asio]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - boost.asio 和文件 i/o 有什么关系?
我注意到 boost.asio 有很多涉及套接字、串行端口和各种非文件示例的示例。谷歌并没有真正为我提供很多关于 asio 是否是执行异步文件 i/o 的好方法或有效方法的信息。
我有大量数据要异步写入磁盘。这可以通过 Windows(我的平台)中的本机重叠 io 来完成,但我更希望有一个独立于平台的解决方案。
我很好奇如果
- boost.asio 有任何类型的文件支持
- boost.asio 文件支持对于日常文件 i/o 来说已经足够成熟了
- 是否会添加文件支持?对此有何展望?
c++ - 使用 Boost.Asio 时确保有效对象寿命的最佳方法是什么?
最近玩了很多 Boost.Asio。我非常喜欢这个库,因为它提供了一种从当今多核系统中榨取性能的绝妙方法。
我曾经问过自己几次的一个问题,我认为在使用 Asio 进行异步调用时,关于对象生命周期/所有权的问题值得一提。
我反复遇到的问题是,您经常不得不“过期”一个仍然有异步回调待处理的对象。如果该对象在调用回调之前超出范围,则不可避免地会发生爆炸。
为了解决这个问题,我已将boost::enable_shared_from_this
模板用作大多数基于 asio 的类的基类。这工作正常,但有点麻烦:通常这也意味着保护构造函数并向类添加工厂方法以确保在 shared_ptr 内创建所有实例。
我只是想知道其他人是如何解决这个问题的。我是最好的方法吗?还是我的 Asio.Foo 都错了?
讨论... :)
boost - 如何使用 asio 执行非阻塞读取?
我正在尝试使用 boost::asio 从串行端口上的设备读取和写入。boost::asio:read() 和 boost::asio::serial_port::read_some() 都会在没有可读取的内容时阻塞。相反,我想检测这种情况并向端口写入命令以启动设备。
我怎样才能检测到没有可用的数据?
如有必要,我可以异步执行所有操作,如果可以的话,我宁愿避免额外的复杂性。
c++ - boost asio and endian
I cant tell, does boost asio handle endian?
c++ - 重新连接设备后的 boost::asio::serial_port 读取
我对从 GPS 设备(USB 串行)读取的 boost::asio::serial_port 类有疑问。连接设备并从中读取工作正常,但是当我断开并重新连接设备时,read_some 不会从端口读取任何字节。
由于 boost 无法检测到串行端口已消失( is_open() 返回 true ),因此当我没有获取数据时,我会定期取消()、关闭()和打开( GPS_PORT )设备,重置端口选项在途中。但这也无济于事,输入缓冲区保持为空。
我是否遗漏了什么,或者做错了什么,或者这是 asio 中的错误?有没有标准的方法来检测端口已经消失?
c++ - 无法真正理解构造 tcp::resolver::query 的参数是什么
我正在启动 Boost.Asio 并尝试在官方网站上给出示例。
这是客户端代码:
问题是 - 我无法找出从命令提示符运行程序的参数是什么?
c++ - boost.asio 如何发现我的服务器应用程序正在侦听哪个端口?
当客户端应用程序连接到服务器时,boost.asio 不使用基本概念对我来说有点奇怪 - 使用 IP 地址和端口。可能是我在 Boost 中有点菜鸟——我接受这一点——但无论如何我不明白。
所以,我有这样的代码让客户端连接到本地主机上的服务器:
Windows 在其 WinSock 2.0 中使用两个参数——IP 和端口——来识别服务器。
所以,问题是 - Asio 究竟是如何找出服务器在哪个端口上监听连接的?它会扫描所有端口吗?而且,如果确实如此,如果两台服务器同时监听不同的端口会发生什么?
c++ - 如何获取 boost::asio::ip::tcp::socket 的 IP 地址?
我正在使用 Boost ASIO 库用 C++ 编写服务器。我想让客户端 IP 的字符串表示形式显示在我的服务器日志中。有谁知道该怎么做?
c++ - 使用Boost序列化和发送数据结构?
我有一个看起来像这样的数据结构:
我想使用 boost::serialization 序列化这个数据结构,然后使用 boost::asio 通过 TCP/IP 传输它,然后让另一个应用程序接收数据并使用相同的 boost 库对其进行反序列化。
我正在尝试遵循 boost::serialization 教程,(正如其他一些 SO 问题所建议的那样),但该示例专门用于写入/读取文件,而不是使用 boost::asio 的套接字。
我很确定我有合适的工具来完成这项工作——我只需要帮助让它们一起工作。写入套接字与写入文件没有什么不同,对吧?
任何建议都非常感谢。谢谢!
c++ - boost::asio::ip::tcp::resolver::resolve() 永远阻塞
我正在尝试创建与boost.asio 示例中的此代码类似的内容。
套接字.h:
套接字.cpp:
g++ 构建它没有任何错误,但代码永远不会超过 resolver.resolve() 调用。
我已经为主机尝试了“127.0.0.1”和“localhost”,为端口尝试了“80”。(不认为这应该重要,但 apache2 已启动并正在运行)
当我 ctrl+c 退出我的应用程序时,它显然会终止,但它会在它之前输出“连接到字符串”。
我计划自己构建示例并查看是否出现相同的问题,并且肯定会在此处发布结果。有没有人遇到过这个问题或知道什么可能导致这种行为?
编辑:
这个例子运行得很好......我想我有一些调试要做。
第二次编辑:
我不明白,唯一可能不同的是主机/端口。
示例使用 char* argv[] 我正在使用:
第三次编辑:
它确实似乎在连接时阻塞,忘记了 fflush(stdout)。那么肯定是socket有问题了。要做更多的测试。
第四次编辑:
愚蠢的我,它根本没有阻塞!我只是过于依赖控制台输出..