无法接收UDP广播的原因分析

业务需求,需要UDP广播和接收消息,但是实测发现UDP广播的消息使用nc命令可以收到,在程序中收不到,在此记录分析过程。

原因

查询Stack Overflow,看到一个同类型问题:Python UDP Broadcast not sending,其中Adam Rosenfield提到:

connect is fine with UDP, though it’s not standard practice. All it does is set the default destination address for all future send calls, and it limits the allowed source addresses from all future recv calls on the socket. It doesn’t actually do any sort of network connection.

connect 对于 UDP 来说没问题,尽管这不是标准做法。它所做的只是为所有将来的 send 调用设置默认目标地址,并限制套接字上所有将来的 recv 调用所允许的源地址。它实际上并不进行任何类型的网络连接。

排查我的代码,发现确实调用了connect,导致发送正常,无法接收广播消息。

一般UDP广播直接调用sendto指定广播地址即可,并且注意设置SO_BROADCAST

引用