用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號來代替更好。

 

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