c++ - Boost.Asio - 确保对方收到数据

标签 c++ boost boost-asio

我正在使用 boost::asio 并向客户端发送列表并在完成后关闭套接字。不知何故,客户端有时在收到所有内容之前收到文件结束错误。

我猜这与服务器在发送最后一个列表条目后立即关闭套接字有关。 async_send只有在数据发送成功后才调用handler,有什么简单的方法可以解决吗?

或者我的文件结束错误来自其他原因?

最佳答案

Boost.Asio 是基于 TCP 和 UDP 套接字的独立于操作系统的抽象层。它们不保证其他应用程序已接收并处理数据。您需要在您的应用程序中包含此逻辑,您可能需要研究 OSI model .

如果您在 async_send() 返回后立即关闭套接字,这是不正确的。您应该仅在调用完成处理程序后关闭它。

关于c++ - Boost.Asio - 确保对方收到数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14420404/

相关文章:

c++ - boost::asio async_read/async_send 正在绕过它的处理程序

c++ - 我可以使用 boost::bind 来存储不相关的对象吗?

c++ - opencv数组大于255

c++ - Visual Studio中D8049错误的原因是什么?

c++ - 有没有办法在非模板类中定义模板成员?

c++ - 如何使用 bind 基于::second pair 成员排序的 std::pair 创建集合

c++ - 从 json 文件构建 boost 属性树性能很差?

c++ - BOOST_SCOPE_EXIT 将参数作为值传递

内存碎片@ boost::asio?

c++ - 编译时 C++ 程序中的大量数据