通过 udp 延迟接收消息 python

receiving messages through udp with delay python

我正在尝试了解如何接收 udp 消息。我有一个外部工具,每 1 秒通过 udp 发送一次数据,还有一个简单的 python 脚本可以像这样接收它们。

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(ip,port)
while True:
    data, addr = sock.recvfrom(num)
    

我可以接收数据,但是如果我把代码改成

while True:
    data, addr = sock.recvfrom(num)
    time.sleep(10)

我仍然收到与以前相同的消息,只是速度较慢。我原以为 'time.sleep(10)' 期间发送的消息会丢失(据我所知,即使不是全部消息,也会丢失大部分消息)。是否有一个内部存储器存储所有发送的消息,无论接收者是否收到它们?

Socket 有一个与 python 无关但与 OS.

无关的缓冲区

所以是的,udp 数据包只是坐在那里等待应用程序将它们从缓冲区读取到应用程序内存。

当然这个缓冲区是有限的,所以如果你等待太久,缓冲区会变满,你就会开始丢失数据包。