2017-06-19 57 views
1

首先,我知道TCP和UDP之間的區別,我知道,這可能是某些數據包可以同時使用UDP丟失。如何確保發送完整的數據? SENDTO(UDP套接字)的Python

然而,當我們假設我設計了一些簡單的ACK對UDP的協議,我怎麼能保證我發送/接收的全部數據?

例如,對於TCP套接字這是相當簡單:

接收:

def recvall(sock, n): 
    i = 0 
    data = "" 
    while i < n: 
      data += sock.recv(1) 
      i += 1 
    return data 

併發送:sock.sendall(msg)

如何類似的事情應該同時使用UDP套接字來完成?

回答

4

如果你想確保你的客戶端收到的所有數據,使用TCP。在您需要確保數據完整性的情況下,UDP並不意味着使用UDP。只有在丟棄數據包的情況下才允許使用UDP。

現在這樣說,你可以檢查,如果客戶端收到的所有數據通過將序列號在你的UDP數據包。然後,您的客戶端可以檢查每個傳入數據包的序列號,並將其與最後看到的序列號進行比較。如果current_packet_sequence_num != last_packet_sequence_num + 1那麼你可以假設你的客戶端沒有收到所有的數據。

+0

根據[這](https://gamedev.stackexchange.com/a/83550),選擇TCP UDP VS不講究誠信,它是關於你_streaming_數據或發送_messages_,所以才說「使用TCP」沒有理解協議的性質就簡單而錯誤。 –

相關問題