如何确保发送整个数据? sendto(udp socket)Python

时间:2017-06-19 17:44:50

标签: python sockets tcp udp

首先,我知道TCP和UDP之间的区别,我知道,使用UDP时可能会丢失一些数据包。

然而,当我们假设我为UDP设计了一些简单的ACK协议时,我如何确保发送/接收整个数据?

例如,使用TCP套接字非常简单:

接收:

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

并发送:sock.sendall(msg)

使用UDP套接字时应该如何进行类似的操作?

1 个答案:

答案 0 :(得分:4)

如果要确保客户端收到所有数据,请使用TCP。 UDP不适用于需要确保数据完整性的情况。只有在丢弃数据包可接受时才使用UDP。

现在,您可以通过在UDP数据包中添加序列号来检查客户端是否收到了所有数据。然后,您的客户端可以检查每个传入的数据包的序列号,并将其与它看到的最后一个序列号进行比较。如果current_packet_sequence_num != last_packet_sequence_num + 1,那么您可以假设您的客户端未收到所有数据。