#python #udp
#python #udp
Вопрос:
Я пытаюсь понять, как принимаются сообщения udp. У меня есть внешний инструмент, который отправляет данные по udp каждые 1 секунду, и простой скрипт на 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)’, будут потеряны (что, как я понимаю, будет большинством, если не всеми сообщениями). Существует ли внутреннее хранилище, в котором хранятся все отправленные сообщения, независимо от того, получает их получатель или нет?
Ответ №1:
Сокет имеет буфер, который не имеет ничего общего с python, но с ОС.
Так что да, пакеты udp просто сидят там и ждут, пока приложение прочитает их из буфера в память приложения.
Конечно, этот буфер ограничен, поэтому, если вы будете ждать слишком долго, буфер заполнится, вы начнете терять пакеты.