数据报总是被完整接收吗?

2024-03-16

大多数数据报接收函数,例如c的recv或read、java的DatagramPacket类或python的SocketServer,都包含找出接收数据量的可能性。

c:

int amount = recv(sock, buf, n, MSG_WAITALL);

java:

int amount = datagramSocket.getLength();

python:

class MyUDPHandler(socketserver.BaseRequestHandler):
    def handle(self):
        amount = len (self.request[0])

这些可靠吗?或者是否有可能由于数据包碎片或网络延迟等原因而仅收到部分消息?
换句话说:当我通过 udp 发送可变长度的数据块并在另一端接收它时,这些数量值是否完全等于原始块的大小?

Edit:
ninjalj 提出了一个很好的观点,我想将其包含在这里。当接收功能被中断(例如被信号中断)时会发生什么?当两个线程同时尝试从同一个套接字接收时会发生什么?


UDP 数据报无法部分传送;它们按原样交付或根本不交付。所以是的,您可以确定收到的数据报的发送方式与您在接收端看到的完全一样。

编辑以纳入威尔的评论,这是最正确的(即技术上):

1它们可以在 IP 级别进行分段,但接收方的网络堆栈要么完全重新组装数据报并将其传递给发送时的侦听进程,要么不会确认已收到任何数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据报总是被完整接收吗? 的相关文章

随机推荐