You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS下Python接收UDP广播报Can't assign requested address错误

问题根源

macOS 网络栈继承自BSD,套接字逻辑严格遵循POSIX规范:不允许用户态程序直接绑定受限广播地址255.255.255.255,直接绑定就会触发OSError: [Errno 49] Can't assign requested address错误。
绑定子网广播地址(如192.168.4.255)无法接收目标为255.255.255.255的数据包,原因是255.255.255.255是本地链路级受限广播,内核不会将这类数据包投递到绑定子网广播地址的套接字。
初始代码能在Ubuntu运行,是因为Linux对套接字实现做了自定义扩展,允许直接绑定广播地址,属于平台特有行为,不具备跨平台兼容性。

解决方法

macOS下接收发往255.255.255.255的UDP广播,只需要把绑定地址从广播地址替换为通配地址0.0.0.0即可,其余广播相关配置不需要改动。
可用参考代码:

import socket

server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 开启广播权限
server.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
# 绑定所有本地网卡的目标端口,这是BSD系系统接收全局广播的标准写法
server.bind(('0.0.0.0', 10002))

# 数据接收逻辑
while True:
    data, addr = server.recvfrom(4096)
    print(f"收到{addr}发来的广播数据: {data}")

异常处理补充

如果启动时提示端口被占用,可在bind调用前增加端口复用配置:

server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

内容的提问来源于stack exchange,提问作者Elliott B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 17:39:18