等待X秒以接收UDP数据包Python

2024-10-03 21:27:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Python编写一个客户机,它注册到服务器上。该客户机向register发送一个UDP包,并等待来自服务器的register accepted响应包。在

有些数据包可能丢失,因为它是UDP,所以我需要代码:

发送数据包并等待5秒等待响应,如果没有收到数据包,则再次发送数据包,然后等待10秒,如果已经没有响应,则现在15秒,如果再次没有响应,则中断循环。在

我的问题是,要接收数据包,我要做的是:

skt1.sendto(pqtUdp,(srvAdr,prtUdp))
data,addrs = skt1.recvfrom(56)

rcvfrom是一种阻塞方法。我搜索了一下,我认为使用select我可以知道何时收到一个包,然后读取套接字并获取它,但是我不知道如何去做,我找不到{}简单的例子来说明我在做什么。在

有人能帮我个忙吗?在

谢谢!在


Tags: 代码服务器registerdata客户机数据包udpsendto
2条回答

如果将套接字设置为非阻塞,则可以轻松实现这一点。声明套接字后,请执行以下操作:

skt1.setblocking(0)

如果recvfrom()没有接收到数据包,那么它将引发一个错误,您可以处理该错误并继续处理,如下所示:

^{pr2}$

这是一个使用scapy的简单任务:

>>> sr(IP(dst="172.20.29.5/30")/UDP(dport=[21,22,23]),inter=5,retry=2,timeout=1)

sr是sendrecice函数,您可以使用inter和重试次数以及超时来指定等待间隔。

相关问题 更多 >