首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确保整个数据被发送?sendto (udp套接字) Python

如何确保整个数据被发送?sendto (udp套接字) Python
EN

Stack Overflow用户
提问于 2017-06-19 17:44:50
回答 1查看 1.4K关注 0票数 1

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

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

例如,对于TCP套接字,它非常简单:

接收:

代码语言:javascript
复制
def recvall(sock, n): 
    i = 0
    data = ""
    while i < n:
          data += sock.recv(1)
          i += 1
    return data

然后发送:sock.sendall(msg)

在使用UDP套接字时,应该如何做类似的事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-19 17:51:34

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

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44636831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档