【问题标题】:Recursive processing of data from socket?递归处理来自套接字的数据?
【发布时间】:2016-02-24 10:36:43
【问题描述】:

在使用 boost asio read_some() 处理来自服务器的数据时,我遇到了一个问题。

数据格式为:83,datalength,data

问题:

我正在从服务器接收数据包,其中数据包可以包含单个数据或多个数据。 此外,在某些情况下,我可以接收 2-3 个数据包中的单个数据。 虽然我已经为此编写了迭代逻辑,但我想知道 some1 是否可以为此类问题建议递归逻辑。 我对递归不是很有信心,因此非常感谢您的帮助。

另外,另一个问题,如果使用 boost asio read_some() 读取数据的最大长度是 1500 字节吗?

【问题讨论】:

  • 我无法想象在这种情况下递归实现在哪里会有所帮助(甚至合理可能......)您能否详细说明您正在寻找递归方式的原因?
  • @JackWhite:好吧!! ,我只是认为使用递归来实现会更容易,因为数据正在一次又一次地处理。由于我的逻辑通过迭代方法变得非常复杂,因此正在寻求简化它。能做到吗?
  • 将数据打散到队列中,监控队列内数据的有效性,当知道好时取出处理。
  • 当您说递归时,您可能是在谈论 asio 的异步部分,即boost::asio::async_read()
  • @PhilWilliams :我已经将所有传入的数据推送到向量中,并对其进行处理,但正如我提到的处理逻辑变得有点麻烦,因此正在寻找一种简单的方法来做同样的事情。跨度>

标签: c++ sockets recursion boost


【解决方案1】:

根据 cmets,我认为递归在这里不是一个好的选择。我必须坚持我的迭代方法。 感谢every1 的及时回复/建议

【讨论】:

    【解决方案2】:

    将事物分成 2 个缓冲区,一个用于原始数据,一个用于完整数据包的队列。
    一些链接:

    while(true) {
        receive data from socket
        append data to sendBuffer
        while( sendbuffer contains a complete packet) {
            move packet to packetQueue();
            removePacket from sendbuffer;
        }
    }
    

    【讨论】:

    • 我已经在做类似你建议的事情了。无论如何感谢你的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多