python - 我应该在发送udp数据后配置套接字吗?

时间:2017-01-11 14:26:46

标签: python sockets network-programming udp python-sockets

我有一个监听事件的方法,每次事件发生时,它都应该将数据发送到套接字(它的udp,所以我不检查是否收到了数据)。

我在event_handler中拥有的是:

    socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    socket.sendto(data, (IP, PORT))

在我看来,我需要创建一个新的套接字每次调用该事件,因为我不知道两个事件之间会经过多长时间,所以拥有全局套接字变量并发送事件数据不保证套接字仍在运行。

问题是,因为我每次创建套接字,我应该在发送数据后处理/关闭它吗?使用后处理或关闭插座的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

正如Rob已经解释的那样,您不一定每次都需要创建一个新的套接字。

根据文档(https://docs.python.org/3/library/socket.html):

  

套接字在垃圾回收时会自动关闭,但是   建议明确关闭(),或使用with   他们周围的声明。

因此,如果您选择每次创建/关闭,您可以执行以下操作:

with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as socket:
    socket.sendto(data, (IP, PORT))

答案 1 :(得分:1)

  

在我看来,每次调用事件时我都需要创建一个新的套接字,

不,可以重复使用以前的套接字。请记住,UDP sockekts是无连接的,因此您对断开连接的担忧并不适用。

  

问题是,因为我每次创建套接字,我应该在发送数据后处理/关闭它吗?

是的,如果您要创建一个数量众多的套接字,请随时关闭它们。否则,您将耗尽文件描述符槽,这是您流程中的有限资源。