对具有特定结构的数据包缓冲区进行排序

Sorting a buffer of data packets with specific structure

我需要根据 SEQ 号(它只是一个无符号的 4 字节整数)按升序对通过 TCP server/network 传输的数据包进行排序。换句话说,我想重新排列我的数据缓冲区(为简单起见,我使用 std::vector),以便数据按 SEQ 升序排列,然后是相应的 CHECKSUM 和 LEN(length/size 在数据包的字节),当然还有实际的(字节)数据...

每个数据包都遵循下面概述的结构,并且会有重复的 SEQ 号(一旦我有数据顺序,使用 CHECKSUM 机制验证好的数据包应该不会有太大困难)。

如有任何想法或帮助,我们将不胜感激,如果之前已回答此问题,我在此深表歉意。

执行此操作的最佳方法是实际对缓冲区本身进行排序,而不是对数据进行排序。

为此,将每个原始数据包缓冲区放入列表或映射中,按序列号对它们进行索引。收到所有数据包后,从头到尾遍历 list/map 并将数据按顺序复制到足够大的缓冲区以包含所有数据。

根据你的问题。 A vector<byte> 代表你的缓冲区

以下为伪代码解释

vector<byte> buffer;
// receive data;

// packet as a struct    
vector<packet> packets = extract_packet( &buffer );

sort(packets .begin(), packets .end(), 
[](const packets & a, const packets & b) -> bool
{ 
    return a.SEQ < b.SEQ; 
});