递归处理来自套接字的数据?
Posted
技术标签:
【中文标题】递归处理来自套接字的数据?【英文标题】: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 :我已经将所有传入的数据推送到向量中,并对其进行处理,但正如我提到的处理逻辑变得有点麻烦,因此正在寻找一种简单的方法来做同样的事情。跨度> 【参考方案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;
【讨论】:
我已经在做类似你建议的事情了。无论如何感谢你的建议。以上是关于递归处理来自套接字的数据?的主要内容,如果未能解决你的问题,请参考以下文章