用UDP通讯如何保证对方百分百收到数据?

在UDP通讯中,当你的数据包发出去后,至于对方有没有正确收到数据,并不知道,那么,如何保证你发出去的数据,对方一定能收到呢???我们可以借鉴TCP协议的做法(回复+重发+编号 机制)

1)接收方收到数据后,回复一个确认包,如果你不回复,那么发送端是不会知道接收方是否成功收到数据的

      比如A要发数据“{data}”到B,那B收到后,可以回复一个特定的确认包“{OK}”,表示成功收到。

    但是如果只做上面的回复处理,还是有问题,比如B收到数据后回复给A的数据"{OK}"的包,A没收到,怎么办呢???

2)当A没有收到B的"{OK}"包后,要做定时重发数据,直到成功接收到确认包为止,再发下面的数据,当然,重发了一定数量后还是没能收到确认包,可以执行一下ARP的流程,防止对方网卡更换或别的原因。

    但是这样的话,B会收到很多重复的数据,假如每次都是B回复确认包A收不到的话。

3)发送数据的包中加个标识符,比如A要发送的数据"{标识符|data}"到B,B收到后,先回复“{OK}"确认包,再根据原有的标识符进行比较,如果标识符相同,则数据丢失,如果不相同,则原有的标识符 = 接收标识符,且处理数据。

     当A发送数据包后,没有收到确认包,则每隔x秒,把数据重发一次,直到收到确认包后,更新一下标识符,再进行后一包的数据发送。

经过上面1),2),3)点的做法,则可以保证数据百分百到达对方,当然,标识符用ID号来代替更好。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章