boost-asio相关内容

如何为 boost::asio 添加代理支持?

在我的桌面应用程序中,我使用 boost::asio 添加了对各种互联网资源的访问.我所做的就是发送 http 请求(即映射图块服务器)并读取结果.我的代码基于 asio sync_client 示例. 现在我收到客户的报告,他们在公司中运行代理而无法使用这些功能.在网络浏览器中,他们可以输入他们的代理地址,一切都很好.我们的应用程序无法下载数据. 如何为我的应用程序添加此类支持? ..
发布时间:2021-12-31 19:29:04 C/C++开发

Boost asio,单个 TCP 服务器,多个客户端

我正在创建一个 TCP 服务器,它将使用 boost asio,它将接受来自许多客户端的连接、接收数据并发送确认.问题是我希望能够接受所有客户,但我一次只想与一个客户合作.我希望所有其他事务都保留在队列中. 示例: Client1 连接 Client2 连接 Client1 发送数据并请求回复 Client2 发送数据并请求回复 Client2 的请求被放入队列 Client ..
发布时间:2021-12-28 13:09:18 C/C++开发

使用 boost::asio 配置 TCP keep_alive

Linux 和 Windows 都支持 TCP keep-alive 数据包.它们可以通过(依赖于系统的)setsockopt 调用来激活和配置,参见例如这篇文章 适用于 Linux 案例.使用 boost::asio 时,似乎支持保持活动消息,请参阅 当前文档.但是,该页面仅涵盖激活它.在对旧帖子 有人指出 Boost 最近增加了在操作上配置超时的方法(这避免了对不同系统的 setsockopt ..
发布时间:2021-12-28 13:05:26 C/C++开发

如何使用`asio::ip::tcp::iostream`避免数据竞争?

我的问题 在使用两个线程通过 asio::ip::tcp::iostream 发送和接收时,如何避免数据竞争? 设计 我正在编写一个使用 asio::ip::tcp::iostream 进行输入和输出的程序.该程序通过端口 5555 接受来自(远程)用户的命令,并通过相同的 TCP 连接向用户发送消息.因为这些事件(从用户接收的命令或发送给用户的消息)是异步发生的,所以我有单独的 ..
发布时间:2021-12-28 12:52:40 C/C++开发

在 Boost ASIO 中,如何设置源 IP 地址以模拟另一台服务器的 IP 地址?

我有一个基于 Boost ASIO 的 C++ 服务器程序,我希望能够将 TCP 使用的源 IP 地址设置为另一台服务器的源 IP 地址.我知道可以读取源 IP 地址和目标 IP 地址,但大概也可以设置它们? 大概如果我在 C++ 代码中设置了“错误"的源 IP 地址,就会与网络堆栈发生一些交互.即使C++代码是对的,网络堆栈不会在出路时重新设置源IP地址吗?正确的方法是编写 C++ ASI ..
发布时间:2021-12-28 12:51:53 C/C++开发

使用 boost 的 TCP 零复制

我正在尝试使用 boost 实现 tcp 零复制,但我无法在 google 上找到任何东西.我的问题是是否可以使用 boost 库执行零复制,如果是这样,请给我发一些例子或一些链接. 解决方案 您可以观看 Yandex 人员的 BoostCon 演讲:基于Boost.Asio的网络服务器的优化 我的直觉是他们(Yandex 的人)过度设计了这个(相当......).我想说的基本解决方 ..
发布时间:2021-12-28 12:48:34 C/C++开发

如何设计 boost::asio 套接字或其包装器的正确释放

在几年没有接触它之后,我正在尝试使用 boost::asio 制作我自己的简单异步 TCP 服务器. 我能找到的最新示例列表是:http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/tutorial/tutdaytime3/src.html 我在这个示例列表中遇到的问题是(我觉得)它作弊而且作弊很大,通过将 tcp_conne ..
发布时间:2021-12-28 12:34:03 C/C++开发

asio::read 超时

我需要知道如何超时读取(同步或异步无关紧要).我想检查设备是否连接了串口. 为此,我使用 asio::write 然后等待设备的响应. 如果连接了设备 asio::read(serial, boost::asio::buffer(&r,1)) 工作正常,但如果没有设备,程序会停止,这这就是为什么我需要超时 我知道我需要一个 deadline_timer 但我不知道如何在 asyn ..
发布时间:2021-12-24 15:47:10 C/C++开发

在boost asio中strand有什么优势?

学习 boost asio 并找出一个名为“strand"的类,据我所知.如果只有一个 io_service 与特定的链相关联并通过链发布句柄. 示例(来自 此处) boost::shared_ptr 然后,strand 会为我们序列化处理程序的执行.但是这样做有什么好处?如果我们希望任务成为连载? 解决方案 想象一个系统,其中单个 io_service 管理数百个网络连接的套接 ..
发布时间:2021-12-24 15:46:56 C/C++开发

boost::asio::socket 线程安全

(这是我原来问题的简化版) 我有几个线程可以写入 boost asio 套接字.这似乎工作得很好,没有问题. 文档说共享套接字不是线程安全的( 这里,在底部)所以我想知道我是否应该用互斥锁或其他东西保护套接字. 这个问题 坚持认为保护是必要的,但没有给出如何保护的建议. 我原来的问题的所有答案都坚持认为我在做的事情很危险,并且大多数人都敦促我用 async_writes 甚 ..
发布时间:2021-12-24 15:45:13 C/C++开发

如何模拟 boost::asio::write 超时

我正在尝试模拟 boost::asio::write 超时.或者你可以说,我正在尝试使用 boost::asio::async_write 超时. 正如我所见,boost::asio::write 会阻塞,直到所有数据都写入&在另一边阅读.这种功能当然需要超时. 所以,阅读这里的简单答案Robert Hegner 演示了如何使用 timeout 执行 boost::asio::asyn ..
发布时间:2021-12-24 15:42:03 其他开发

优雅地终止基于 Boost Asio 的 Windows 控制台应用程序

我正在开发基于 boost.asio 的 HTTP 服务器.它应该在外部停止.我们使用 asio 信号处理,它适用于 ctrl-c,但不处理 WM_CLOSE,因此没有直接的方法从外部优雅地关闭应用程序,例如通过 taskkill.强制终止进程不是一种选择.有没有已知的方法来解决这个问题? 解决方案 更新 只需使用您“通常"使用的任何 IPC 方法 编写一个简单的过程控制实用程 ..
发布时间:2021-12-24 15:39:14 C/C++开发

如何检查 Boost.Asio 中的套接字是否关闭?

检查连接远程端的套接字是否关闭的最简单方法是什么?socket::is_open() 即使在远程端关闭也会返回 true(我使用的是 boost::asio::ip::tcp::socket). 我可以尝试从流中读取并查看它是否成功,但是我必须更改程序的逻辑以使其以这种方式工作(我不希望此时从流中提取数据支票). 解决方案 如果连接已被对等端彻底关闭,您应该在阅读时得到一个 EOF. ..
发布时间:2021-12-24 15:37:57 C/C++开发

如何发起“事件"当我的 Boost::asio tcp 服务器刚开始运行时(又名 io_service.run() )?

基于 boost::asio 客户端/服务器关系,只有当服务器线程处于“等待连接"状态时,我才必须从服务器程序启动客户端程序. 我的问题是如何知道那个状态? 作为示例,使用 asio 示例/序列化link,并替换掉main函数带有该代码的 server.cpp: #include #include //等待函数#include #include void server_thr ..
发布时间:2021-12-24 15:37:19 C/C++开发

在 boost::asio 中发送/接收一个结构体

我打算使用 boost::asio::async_write_some 从客户端向服务器发送一个结构体,在本例中为 boost::serialization 和 boost::property_tree 来帮忙, //boost::序列化结构体空白{int m_id;std::string m_message;模板void serialize(archive& ar,const 短版){和中;和 ..
发布时间:2021-12-24 15:35:43 C/C++开发

你能在 boost asio 中设置 SO_RCVTIMEO 和 SO_SNDTIMEO 套接字选项吗?

你能在 boost asio 中设置 SO_RCVTIMEO 和 SO_SNDTIMEO 套接字选项吗? 如果有,怎么办? 注意我知道你可以使用定时器来代替,但我想特别了解这些套接字选项. 解决方案 当然可以!Boost ASIO 允许您访问本机/底层数据,在这种情况下是 SOCKET 本身.所以,假设您有: boost::asio::ip::tcp::socket my_s ..
发布时间:2021-12-24 15:35:08 C/C++开发

Boost.Asio SSL 线程安全

我是创建一个 所有 SSL 套接字共享的链,还是每个 SSL 上下文(由任何关联的套接字共享)创建一个链? Boost.Asio SSL 文档说明了这一点,但没有提到上下文.我认为这意味着我必须对所有内容只使用一个链,但我认为这是在 OpenSSL 支持多线程之前编写的. SSL 和线程 SSL 流对象不执行自己的锁定.因此,所有异步 SSL 操作都必须在隐式或显式链中执行.请注 ..
发布时间:2021-12-24 15:34:43 C/C++开发