Boost asio读取未知数量的字节

时间:2012-06-30 13:51:20

标签: boost asynchronous boost-asio

我有2个案例:

  1. 客户端连接,不发送任何字节并等待服务器响应。
  2. 客户端连接,发送超过1个字节并等待服务器响应。
  3. 问题是下一个: 在第一种情况下,我应该读取没有字节并得到一些服务器响应。 在第二种情况下,我应该读取至少1个字节,然后才会得到服务器响应。 如果我尝试读取至少0个字节,如下所示:

    async_read(sock, boost::asio::buffer(data),
                boost::asio::transfer_at_least(0),
                boost::bind(&server::read, this,
                    boost::asio::placeholders::error,
                    boost::asio::placeholders::bytes_transferred));
    

    在第二种情况下我永远无法获得正确的服务器重新注册。

    但如果我读取至少1个字节,那么async_read操作永远不会结束。

    那么,我该如何处理这种情况?

    更新1: 我仍然在不使用时间限制的情况下寻找解决方案。

2 个答案:

答案 0 :(得分:3)

您认为这是如何工作的?第一种和第二种情况的反应是否有所不同?如果确实有变化,则无法可靠地执行此操作,因为存在竞争条件,您应该修复协议。如果它没有变化,服务器应该只发送响应。

此问题的解决方案不是asio问题。

答案 1 :(得分:0)

我猜你需要使用客户端发送的数据来在案例2中做出正确的服务器响应,并且可能在案例1中做出默认响应。 因此,连接服务器后客户端应该在多长时间内发送数据没有时间限制?也许你应该在服务器接受连接后等待特殊限制时间启动计时器。如果服务器及时收到数据,那就是情况2.如果时间结束,则情况为1。