C++从零开始区块链:P2P模块之UDP数据包分组排序

udp的特点是不可靠,不连接,数据发过去就完事,至于对方收没收到就不管了。
在使用udp进行通信的时候,要在应用层做分组、排序、组包、校验等工作。
发送方现将要发送的数据切片,所有的切片组成一组,标上组号,每个切片根据原始数据的顺序有个组内编号。
发送的时候,每次发送一个切片,并等待接收数据接收方反馈收到数据的信息,如果没有接收到数据接收方的反馈信息就继续发送,接收到数据接收方发送的反馈信息位置。
数据接收方接收到数据后先给发送方发送一个数据接收成功的反馈,然后对数据进行分组存储。存储之前要先检验一下该块数据是否已经接受过了,因为虽然接收方成功的接收到了数据,并发送了反馈信息给发送方,但发送方可能没有接收到反馈信息,发送方会判定是发送失败,从而再次发送该块数据,从而导致了接收方对同一块数据重复接收了两次。
当接收方接收到的数据块数与发送方发送的总块数相同时,说明该数据已经全部接收完成,对数据进行排序组合,最后再进行校验,至此一个数据发送完成。
为了组号处理方便,直接用完整信息的hash作为组号,数据重新组装完成后可以直接用组号进行校验。每一组存到一个map里,有map根据序号自动排序。

//数据切片
void P2PNode::sendBlockChain()
{
    P2PMessage mess;
    int i = 0;
    BlockC
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木千

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值