首先,我知道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套接字时,应该如何做类似的事情?
发布于 2017-06-19 17:51:34
如果要确保客户端接收所有数据,请使用TCP。在需要确保数据完整性的情况下,不应该使用UDP。只有在丢弃数据包是可以接受的情况下才使用UDP。
话虽如此,您可以通过在UDP数据包中添加序列号来检查客户端是否接收到所有数据。然后,客户端可以检查每个传入数据包的序列号,并将其与最后看到的序列号进行比较。如果是current_packet_sequence_num != last_packet_sequence_num + 1,那么您可以假设您的客户端没有接收到所有数据。
https://stackoverflow.com/questions/44636831
复制相似问题